Profesyonel bir programcı olmayan ve asla olmayacak birine yardımcı olmak, kullanımı ve yorumlanması daha okunaklı ve kullanılabilir bir kod yazma [kapalı]


20

Ben Elvis'im, Einstein olmayı öğrenmeye çok çalışıyorum. Mort için çalışıyorum.

Bu çılgın aptal ne hakkında konuşuyor?!?!? (Yalnızca ilk birkaç paragrafı okumanız gerekir)

Bu bağlantıyı okumak istemiyorsanız, temelde ben profesyonel bir programcıyım ve patronum (bu kesinlikle doğru):

bilgisayar bilimi diplomasına sahip olmayan, ancak Office ve VBA'ya çok fazla aşina olan ve genellikle iş arkadaşları arasında paylaşılan verimlilik uygulamaları yazan profesyonel iş kolu programcısı

Bütün bunlar, işimin büyük bir kısmı Arnavut kaldırımlı kodunu alıp üretimi hazır hale getirmektir. Bununla birlikte, çok zayıf stil ve kargo kültürü bunu zorlaştırmaktadır. Bu, programlama kitaplarını okumak istemediğini veya kodunu yeniden düzenlemesine yardım etmeme izin verdiği gerçeğiyle birleşiyor.

Profesyonel bir programcı olmayan birine yardım etmek için başka stratejiler var mı?


3
Workplace.stackexchange.com'un orada gizlenmesi için iyi bir soru var gibi görünüyor , ancak sorunun mevcut haliyle iyi karşılanacağından emin değilim.
Bart van Ingen Schenau

2
@BartvanIngenSchenau Orada yayınlamayı düşündüm ama sorunları çok programlamaya özel olduğu için burada seçtim. Bunun (yardımdan) geliştirme metodolojileri ve süreçleri ve yazılım mühendisliği yönetimi olduğunu düşünüyorum . Ben yaklaşık sormuyorum genel işyeri sorunları, ofis siyaset , "Ben böyle bir kişiyle işe kullanabilirsiniz hangi yazılımı geliştirme stratejileri" soruyorum.
durron597

3
@gnat Bence bu büyük bir fark nedeniyle bir kopya değil: o kopyada, kötü kod zaten yazılmıştır. Burada soru, bu kötü kodun ilk etapta başka biri tarafından yazılmasının nasıl önleneceğidir.
Euphoric

6
Soru şudur: Bu durumda astınız olduğunda herhangi bir şey yapabilir misiniz ?
Philipp

4
Burada çözülecek bir sorun görmüyorum. Düşük iş kalitesi nedeniyle şirketteki diğer insanlardan sorun mu yaşıyorsunuz? Bakım maliyeti nedeniyle önemli son teslim tarihlerini kaçırıyor musunuz veya yazılım sürekli olarak yanlış davranıyorsa, siz ve / veya kullanıcılarınız tarafından rahatsız ediliyor musunuz? Yukarıdakilerin hiçbiri yoksa, o zaman sizin ve patronunuzun ürettiği düşük kaliteli işin tam olarak işin istediği ve ihtiyaç duyduğu şey olduğunu düşünüyorum ve gerçekten farklı bir iş istemekten başka bir sorun yok. Bu noktada sadece nasıl karar verebilir kadar Farklı bir iş istiyorum 's değerinde riski varsa
Jimmy Hoffa

Yanıtlar:


8

Bazı yorumlarda verdiğiniz yanıtlara bakarken, özellikle etki alanı uzmanlarının (onlara bilim insanı diyelim) nasıl anlayacağını anlamak için deneyimlediğinizin oldukça yaygın olduğunu fark edip etmediğinizi bilmiyorum Eldeki problemler için algoritmaları birleştirin ve uyarlayın.

Bilim adamından şikayet etmek ve değişmelerini beklemek yerine, bilim insanının "kod kalitesi" ne fazla önem vermesini beklememeniz gerektiğini fark edin. Diğer yazılım geliştiricilerinin, ana çıkarları programlamada değil, etki alanında yer alan birinin "kod kalitesi" ni önemsemesini sağlamak genellikle zordur.

Buradan gittiğiniz yer büyük ölçüde "bilim insanı" nın çalışmalarını anlama yeteneğinize olan güven derecesine bağlıdır. Kodlarını anlayabileceğinize güveniyorlar ve bir şeyleri değiştirdiğinizde kodları karıştırmayacaklarsa, genellikle bir sorun yoktur. Uzmanlığınıza güvenecekler.

Ancak, bilim adamı kodunu değiştirmenizi istemiyorsa, o zaman henüz güvenlerini "kazanmamışsınız". Eğer durum buysa, bilim insanını düzeltmeye odaklanmak yerine, kendiniz "düzeltmeye" odaklanmalısınız. Bununla kastettiğim, güvenlerini kazanmak için adımlar atmak. Muhtemelen bunu yapmanın en kolay yolu aşağıdaki gibidir:

Test sürecinizin bir parçası olarak:

  1. Algoritmaları daha kolay anlaşılır bir şeye dönüştürmeye başlayın (örn. Diyagramlar, PDL, matematik notasyonu)
  2. Algoritmaları anlamayı öğrenin.
  3. Kenar kasalarını tanımladığınızdan emin olun.
  4. Basitleştirilmiş "alternatif" sunumunuzun doğru olup olmadığını bilim adamına sorun
  5. VE EN ÖNEMLİ olarak bulduğunuz sorunları belirleyin; VE "suçlayıcı" gibi bir şey söylemeden "Algoritmaya bakıyordum ve XYZ'nin bunu yapması ya da yapması gerekiyor mu?" Hiçbir şey bu mermiden daha iyi güven kazanamaz.

Hata bulmaya başladığınızda VE kendi ilgi alanlarına ilgi gösterdikten sonra, oranlar çok daha yüksek hale gelir ve en azından kodu daha "profesyonel" hale getirmek için değiştirmeye başlamanıza izin verir. Çoğu zaman, artık bir prototipi kodlama gereğini hissetmezler. Sadece onlara öğrettiğiniz "alternatif" notasyonlardan birine bir şeyler yazacaklar (farkına bile varmadan) ve ne demek istediklerini bileceğinize güvenecekler.

Elbette, ilk denemem, bilim insanının size yardımcı olmak için daha iyi "iletişim kurmaya" nasıl yardımcı olabileceğine dair bazı öneriler sunmak olacaktır; ama kulağa bunu denemişsin gibi geliyor. Yani sizin kontrolünüzde olan tek adım ne yaptığınızdır. Güvenlerini kazanın ve neredeyse her zaman alan uzmanı, kodlamayı bir başkasına iletmekten rahatlayacak ve kod yazmaya giren tüm küçük ayrıntılar hakkında endişelenmenize gerek kalmayacak. Daha çok algoritmaları geliştirmeye odaklanmayı tercih ederler.

Bazen tek yapabileceğiniz bir öneri sunmak ve bundan sonra olmaktır. % 100 doğru olsanız bile, zaten reddettikleri veya yapmak istemediklerine karar verdikleri bir şeyle uğraşmaya devam ederseniz patronunuzu veya bir kıdemli kişiyi etkilemezsiniz. Aslında bu, ister öneren kişi olun isterse öneren kişi olun, bir ilişkiye zarar verir. İşinizi kolaylaştırmak için SİZİN yapabileceğiniz şeylere odaklanın.


19

Gerçekten "profesyonel bir programcı olmayan biri, dediğin gibi asla profesyonel bir programcı olmayacak" ve işinizin büyük bir kısmı gerçekten "birlikte Arnavut kaldırılmış kodunu alıp üretimi hazır hale getirdiği" zaman, iki kişilik ekip, programlamayı size bırakıp projenin yönetsel kısmına yoğunlaştığında daha verimli olurdu.

Ancak, bu haklı olduğunuzu varsayar. Biz programcılar her zaman diğer insanlar tarafından yazılan kodları bizimkinden daha kötü görmezden gelirler. Bu önyargıyı yenmek gerçekten zor ve meslektaşlarımızı küçümsememize yol açıyor. "Kargo kült programlaması" olarak düşündüğünüz şey, onun bakış açısından "kanıtlanmış en iyi uygulamalar" olabilir ve "nesne yönelimli desenlerin zarif bir şekilde uygulanması" olarak düşündüğünüz şey, onun için "gereksiz bir mühendislik" olabilir. Bana söylemek zor, çünkü sadece hikayenin tarafını biliyorum.

Diğer insanların kodları için küçümseme, programlama tarzlarımız ne kadar farklı olursa o kadar güçlenir. Bu durumda bu olumlu bir içgüdü, çünkü bir projede farklı programlama stillerini karıştırmak çok zor bir iştir.

Her ikiniz de diğerinin stilini taklit edemediğinizde, net sorumluluklar tanımlayabilirsiniz. Bir kişiyi başvurunun bir bölümünden, diğerini diğerinden sorumlu hale getirin. Her iki modül arasındaki açık arabirimleri birlikte tanımlayın, ancak dahili uygulamayı sorumlu olana bırakın. Kodundaki hatalardan daha fazla haberdar olmasını sağlamak için, onun için birim testleri yazabilir ve kodunun açıkça belirttiğiniz arayüz sözleşmesine göre hareket etmediğini belirtebilirsiniz.

Net kod sahipliği oluşturarak farklı stillerinizin daha iyi bir arada bulunmasını sağlayabilirsiniz. Ayrıca, her ikiniz de hataları kendi kodlarında düzeltmekten sorumlu olduğunuzda, birbirlerinin kodlarında sık sık gezinmeniz gerekmeyecektir.


2
Bunu yapmak isterdim. Sorun şu ki, eğer her biri 40 hafta boyunca çalışacak olursak, bu işbölümünü 20 ve 60'a daha fazla dönüştürecekti ve zamanının geri kalanıyla çok az ilgisi olacaktı. Daha fazla personele olan ihtiyacımız (programlaması gerekmiyor) ikimiz de istediğimiz bir şey ama şu anda finansal sorunlar var.
durron597

4
Yaptığımız şey bu değil, ama DNA'yı analiz eden bir proje üzerinde çalıştığınızı hayal edin. Patronunuz, çeşitli şeyler için küçük bir veri kümesini analiz eden, doğruluğunu doğrulayan ve daha sonra işiniz bu programı tüm İnsan Genom Projesi veritabanında çalıştırmaktır. Sadece temizlik tarzım yok, aynı zamanda performans için algoritmayı da geliştirmem gerekiyor. Ama işi (maaşının nedeni) "doğruluk" kısmındaki uzmanlıktır, ki bu gerçekten bir programlama sorunu değildir ve aynı uzmanlığa sahip değilim.
durron597

2
@ durron597: Kaba bir kavram kanıtı çıkarmış gibi geliyor ve sizi güzel ve parlak ve üretime hazır hale getiriyor.
SinirliWithFormsDesigner

4
@ durron597 Doğruluğunu doğrulayabilen alan uzmanıysa, her şeyi tam olarak belirleyecek birim testleri yazma fikrine açık olur mu? Temel olarak işlevselliği prototiplemek yerine, her şeyin doğru olduğundan emin olmak için testleri yazdığı ve gerçek uygulamayı yaptığınız bir TDD formu yaparsınız?
Evicatos

4
@ durron597 (yorumlardan biriyle kıvılcımlanan yabani bir tavşanın ardından :) mantığını, sizin tarafınızdan yeniden yazılmasını gerektirmeyecek şekilde daha açık bir şekilde ifade etmesini sağlayacak bir (n E) DSL yazabilir misiniz? ?
paul

3

Kendinize şunu sormalısınız: burada nihai hedefiniz nedir? 1. patron yardım etmek? 2. şirket yardım etmek? 3. kendinize yardım etmek için? Ve "yukarıdakilerin tümünü" cevaplamadan önce yavaşlayın. İlk göreviniz birincil hedefinizi açıkça tanımlamaktır, çünkü cevap buna bağlıdır.

Hedefiniz:

  1. Patronuna yardım et? Vazgeç. Bunu istemiyor gibi görünmüyor. "Kodunun kötü olduğunu biliyor ama ihtiyacı olanı yapıyor." Dedin. Peki o zaman, tartışmanın sonu. Patronunuz mevcut durumdan memnun kalmadıkça, değişmeyecek ve ona yardım etme çabalarınıza kızacak. Gelecekte bir noktada statükonun "acısını" hissederse, umarım kendinizi güvenilir bir akıl hocası olarak tesis etmiş olursunuz ve yardım için nereye geleceğini bilecektir.

  2. Şirketinize yardım edin? Mevcut durum kâr hanesini tehdit ediyor mu? Son teslim tarihleri ​​risk altında mı? Üst yönetim ısısını artırıyor mu? Değilse, vazgeç. (Bu aslında Jimmy Hoffa'nın orijinal postanıza yaptığı yorumda yaptığı noktadır.) Bununla birlikte, mevcut durum aslında departmanınız / şirketiniz için kabul edilemez bir riski temsil ediyorsa, süreçte bir değişiklik yapılması gerekir. Bu durumda oturmanızı ve farklı bir kontur çizmenizi öneririm.iş bölümü. Buradaki anahtar, patronunuzun kodunu yeniden düzenlemek için harcadığınız zamanın yeni kod yazmak için daha iyi olacağını açıklamaktır. Hepsini kendiniz yazmak için zamanınız olmadığını söylüyorsunuz, ama bunu öneremiyorum. İlgili güçlü yönlerinizi nasıl en üst düzeye çıkaracağınızı anlamanız gerekir. Onu bir Mort olarak düşünmeyi bırakın ve onu üstün alan bilgisine sahip bir genç geliştirici olarak düşünün. Bu, endüstride çok yaygın bir çalışma düzenlemesidir ve bunun içinde nasıl gelişeceğinizi öğrenmeniz sizin için çok önemlidir. Örneğin, emin olun o bilir ki sen onun uzmanlık ne kadar gerekli biliyorum (genellikle bu adımı tekrarlayın) ve daha sonraalçakgönüllülükle aşağıdaki stratejiyi (ya da benzer bir şeyi) bilgisini piyasaya sürmek için daha hızlı bir yol olarak önerin: (a) işi "çevik" süratlere bölmek, (b) aşırı derecede tanımlayan (önden) -tüm gereksinimler ve mimari. (c) Bir önceki adımda üzerinde anlaştığınız altyapıyı oluştururken, tüm algoritmik kararları çözmek için prototipi oluşturmasına izin verin. (d) Doğrulamak için testler yaparken algoritmalarını yapınıza uygulayın. (e) V&V'nizi akran programlama ortamında birlikte yapın. (örneğin, "Bu test başarısız oldu; neden? algoritmik mantık hatası veya kodlama hatası?"; burada tekrarlayın).

  3. Kendine yardım et? Burada dürüst ol. Yaptığınız tek şey işinizden zevk almadığınızdan şikayet ediyorsa, yukarıdaki # 2 hakkında düşünmek için daha fazla zaman harcamanızı öneririz. Şirketle ilgilenmiyorsanız VE işinizden hoşlanmıyorsanız özgeçmişinizi dağıtmaya başlayın. Şirketinize önem veriyorsanız, ancak işinizden zevk almıyorsanız, # 2'ye odaklanmak İKİ hesaplara yardımcı olacaktır. Ancak bu durumda, sadece tutkunuzun gerçekten ödevinizdeki öz merkezli bir hayal kırıklığından değil, Ekibe Yardım Etme arzusundan kaynaklandığı herkes için açıksa bir "kazan-kazan" dır.


1
Mükemmel cevap. Kesinlikle # 2 ve ne yapacağınıza dair açıklamanız son birkaç gündür tartıştığımız şeye benziyor. Kesinlikle yeterince iletişim kurmuyoruz.
durron597

3. noktaya son bir cümle daha ekledim. Belki de en önemlisi. Yayınınızı tekrar okuyun ve dürüstçe kendinize başkalarına rastlamanın yolu olup olmadığını sorun.
kmote

2

Bu tartışmaya bir şey ekleyeceğimden emin değilim, ancak ShowMessage('Hello');aynı satırda daha fazla kod olduğunu öğrenmek için bir Access ihlali veya benzeri bir satıra çarptığında benzer senaryolarda çalıştım. sağ,

İki temel seçeneğiniz olduğuna inanıyorum:

  1. Kodu çalıştırın . Kod çalışıyor ve yapması gerekeni yapıyorsa, patronunuz özellikle kodlarını düzeltmenizi istemedikçe, olduğu gibi bırakın. Bu aynı zamanda kodunuzun daha güzel göründüğünü ve işi size bıraktığını anlamasına yol açabilir (Dunk'un cevabında da işaret ettiği gibi).
  2. Eğer varsa çok belirlenen kod profesyonel hale getirmek için, bir kütüphane / çerçeve oluşturmak kullanabileceği söyledi. Sıklıkla düzelttiğiniz hatalar / stratejiler üzerinde bir model varsa, bunları birkaç kütüphane dosyasına sarıp bir "şirket için temel kütüphane" olarak verebilirsiniz. ortak arayüz.

"Bir kütüphane / çerçeve inşa et" Boş zamanım olduğunda bunu yapmaya çalışıyorum, ama sorun şu ki, proje "kısa vadeli endişeler" için sürekli itiliyor
durron597

1
Ben o yere gittim. Eskiden bana müşterinin kartvizitini veren bir patronum vardı ve bu müşteri için (aslında kartvizit dışında başka bir bilgiye sahip olmadan) "birkaç gün içinde bir web sitesi oluşturmamı" rica ettim. Ona bir kütüphane hazırlama planınızı ve bunun üretiminizi nasıl artıracağını anlatmayı düşünebilirsiniz, böylece zaman kazanabilirsiniz.
mavrosxristoforos

Bir kütüphane oluşturmak, programlarından sadece birini düzelttikten sonra yazmış olduğunuz küçük programların basit bir koleksiyonuyla başlamalıdır.
DougM
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.