Soru:
Korkunç yazılımımı paylaşmalı mıyım?
qsp
2015-01-23 03:21:48 UTC
view on stackexchange narkive permalink

Makalemi yayınladıktan sonra, bazıları geliştirdiğim yazılımı paylaşmamı istedi. İlk başta, makalemin biraz dikkat çekmesine çok sevindim ve sadece ikili değil, aynı zamanda kaynak kodunu, örnek olay incelemelerini vb. Paylaşmaktan da mutluydum. Ama yazılımıma baktığımda çok utanıyorum.

Yazılımım korkunç: kaynak kodu sadece bir karmaşa, birkaç başarısız girişimimi içeriyor; Tasarım kalıplarını hiç kullanmadım, bu yüzden yinelenen kod her yerde; Basitlik ve hızlı uygulama için, genellikle döngüleri vb. yerine yinelemeleri tercih ederim.

Her zaman yeni sonuçlar üretmek için baskı altındayım ve bu kodu temizlemek bana önemli bir çaba harcamaya mal olur.

Sorum şu, bu korkunç yazılımı paylaşmanın insanlara benim hakkımda çok olumsuz bir izlenim bırakıp bırakmayacağı? Paylaştığım kişiler, aynı alanda çalışan muhtemel ortak çalışanlar, işverenler ise kariyerime zarar verir mi?

Akademik yazılım gibi görünüyor.
İlgili: [Bilgisayar kodu nasıl paylaşılır] (http://academia.stackexchange.com/questions/16785/how-to-share-computer-code?lq=1) ve ["Araştırma" kodu için en iyi uygulama modelleri? ] (http://academia.stackexchange.com/q/21276/10643) ve klasik: [Neden birçok yetenekli bilim adamı korkunç yazılımlar yazıyor?] (http://academia.stackexchange.com/q/17781/10643)
Size gerçekten ne kadar yardımcı olabileceğimden emin değilim, ancak sorununuzdan yola çıkarak sizi biraz cesaretlendirebilecek bu videoyu gördüm. https://www.google.co.uk/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0CCsQtwIwAg&url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv% 3D0SARbwvhupQ & ei = k2rBVKP8J8P1OPbMgagL & usg = AFQjCNEIXszWW5AeYeh5TglmX2_yHFD7WA & bvm = bv.83829542, d.ZWU Üzgünüm size daha fazla yardımcı olamayacağımı düşündüm, hangi videoyu göstermek istedim.
Kirli sır: * çoğu * akademik yazılım korkunçtur. Bilgisayar Bilimleri bölümünden çıkan şeyler bile.
CRAP lisansı altında yayınlayabilirsiniz: http://matt.might.net/articles/crapl/
Araştırma genellikle işe yaramayan binlerce şeyi denemeyi içerir. İlk birkaç denemede işe yarayan bir kod yazmayı başarırsanız, muhtemelen araştırma yapmıyorsunuz, sadece uyguluyorsunuz.
SIAM dergisindeki [Bu makale] (http://www.siam.org/news/news.php?id=2064) büyüleyici bir okuma ve çok ikna edici bir argüman sunuyor.
Dikkate alınması gereken başka bir nokta: Ya sonuçlarınızdan bazıları yazılımınızdaki bir hatadan kaynaklanan yanlış verilere dayanıyorsa? Okuyucular bunu kontrol edebilmelidir.
Kodunuzu GitHub gibi halka açık bir yerde yayınlamak, size yazılımınızı aşamalı olarak nasıl geliştirdiğinizi gösterme şansı verir. Yazılımdan elde edilen sonuçları değiştirmeden yazılımı önemli ölçüde geliştirmek kolay bir iş değildir ve bu nedenle çok değerli bir beceridir. Burada yardımcı olması için kodun bir kısmını https://codereview.stackexchange.com/ kod inceleme sitesine gönderebilirsiniz.
@qsphan Merak ediyorum, makaleniz ne hakkında?
Sohbete eklemek için: http://www.phdcomics.com/comics/archive.php?comicid=1692
@mankoff: Lütfen yapma. Bu lisans * berbattır *. 3 Maddeli BSD altında, üzerinde büyük bir etiketle kalite konusunda uyarmak çok daha iyi bir seçenek olacaktır.
akademik olmayan pek çok yazılım da tam bir karmaşa, cf. son bash hataları ...
Blah, bir programcı olarak: "Her zaman yeni bir sonuç üretme baskısı altındayım ve bu kodu temizlemek bana önemli bir çabaya mal olacak." Bu kadar çok baskı altında olmanın nedeninin, kodu hata ayıklamak için o kadar çok zaman harcamanız olduğunu biliyor musunuz?
Kod gerçekten berbat olsa bile - ki şüpheliyim - hala savaşta test edilmiş ve hata ayıklanmış durumda ki bu çok, en son tasarım modellerini kullanmaktan ÇOK daha değerli. 10.7 libX sürüm Y vb. İle XCode ile) çünkü sorun veren ince farklılıklar olabileceği gibi, programlarınızı nasıl derleyeceğiniz ve bağlayacağınızla ilgili tam talimatlar da olabilir. Muhtemelen yazarken bir şekilde otomatik hale getirmişsinizdir - başkalarının görebilmesi için not alın.
Programlama dili optimize etmeyi desteklemediği sürece özyinelemede yanlış bir şey yok
@Philipp: Beni daha çok endişelendiren, kağıdın doğru olduğu ancak kodda kötü bir hata olduğu bir durum. Bu durumda, hatayı düzeltmek cevabın doğruluğunu değiştirir ancak performans özelliklerini değiştirmez (söylemez) ... bu nedenle kodu serbest bırakırsanız, sonuçlarınız geçersiz olmasa bile kendinizi utandırma riskiyle karşı karşıya kalırsınız. (Bu tür hataları daha önce kendi kodumda buldum.)
Akademik olup olmaması önemli değil. http://blog.codinghorror.com/version-1-sucks-but-ship-it-anyway/
@Mark: Çoğu yazılım korkunçtur. Akademik ile sınırlı değil ve gerçekten bir sır değil. ;-)
Buna ek olarak, büyük uygulamalarda her gün kullanılan bilimsel yazılımlar bile dağınık ve korkunç hale geliyor - Met Office tarafından kullanılan kod hala Fortran'da ve birkaç on yıl öncesinden kalan bitleri var ...
@djechlin Bazen doğru olsa da, "Baskınızın kaynağı kötü kodlamanızdır" her zaman genelleştirilemez. En son Ebola salgınını yönlendiren Python becerilerimle ilgili bir şey yoksa?
@Fomite Python becerilerinizle ilgili bir şey, Ebola araştırmanızı henüz bitirmemiş olmanızdır, eğer bu şekilde söylemek istiyorsanız: P
@djechlin Hayır, sanırım hala ölmekte olan insanlarla daha fazla ilgisi var ...
@Fomite her iki şekilde de ölen insanlar varsa, neden kod yazmaya uğraşasınız ki?
@Fomite benim amacım, eğer * yapacaksanız * bunu * iyi * ve * işinizdeki * büyük * darboğazsa * hızlı * yapmalısınız. Sanırım işinizdeki en büyük darboğazın ebola yaygınlığı olduğunu söyleyebilirsiniz, ancak bundan sonra, kodunuzun ne kadar iyi çalıştığına dair korkutucu derecede iyi bir şans var. Ancak ebolanın varlığında ısrar etmek istiyorsanız, sorun sizin için daha fazla güçtür.
@djechlin Bir akademisyen üzerindeki baskının kaynağının kötü kodlamaya indirgenmesi fikrinin hem son derece küstah hem de kesinlikle genelleştirilemez olduğunu belirtmek isterim.
Bir lisans veya lisansüstü bilgisayar bilimleri öğrencisiyle çalışmak ve onların kodun bir kısmını 'temizlemelerini' sağlamak mümkün müdür?
Bir programcının önerisi: Başarısız girişimlerinizi yorumlanmış kod olarak veya kullanılmayan sınıflarda tutmayın.Bunun yerine, (yarı) çalışan sürümleri sık sık kaynak denetimine (GIT) ekleyin.__Her zaman__ artık gerekli olmayan ölü kodu kaldırın!Daha önceki bir sürüme geri dönmeniz gerekiyorsa, onu kaynak kontrolünden geri yükleyin.Bu şekilde kodunuza hakim olmak çok daha kolaydır çünkü okunacak çok daha az kod vardır.Kodunuzun süslü tasarım kalıpları vb. Kullanmadığına gelince: bu iyi bir şey olabilir, olabildiğince basit tutun, yalnızca kesinlikle gerekli olan yerlerde karmaşıklık ekleyin.
Onsekiz yanıtlar:
Ian
2015-01-23 03:31:21 UTC
view on stackexchange narkive permalink

Evet, yapmalısınız.

İlk olarak, çoğu bilimsel yazılım berbattır. Sizinki ortalamanın altındaysa çok şaşırırım: Tasarım modellerini bildiğiniz gerçeği ve özyineleme ile döngüler arasındaki fark bunun daha iyi olduğunu gösterir.

İkincisi, teşvik veya motivasyona sahip olma olasılığınız düşüktür. başka biri (veya 6 ay içinde) ihtiyaç duymadıkça veya ihtiyaç duyulana kadar daha iyi hale getirmek için. Açmak size bu teşviki sağlar.

Olası avantajlar: olası yeni ortak çalışanlar, hata düzeltmeleri, uzantılar, yayınlar.

Olası olumsuz yönler: zaman çizelgesi (diğer insanlar için kodu koruma veya sorunları düzeltme), kepçe almak. Açık olacağım: Bu olumsuz yönlerin ikisini de çok ciddiye almıyorum.

Çoğu bilimsel yazılım korkunç DEĞİLDİR. (Birkaç on yıldır onunla çalışarak ve onu optimize ederek bir hayat kazanıyorum, bu yüzden bilinçli bir fikrim var.) İyilik için oldukça farklı kriterlere sahip: çalışmak, pratik zamanda doğru cevaplar almak, genişletilebilir olmak en son yarı-dini tasarım paradigmasına veya dil eğilimine uymak yerine bir sonraki teoriye vb. Ve OP için, "korkunç" yazılımınız, biraz temizlenip yorumlanırsa, diğer bilim adamları için "iyi" koddan daha erişilebilir olabilir.
Buna, canlı bir topluluğa sahip olan ve insanların işbirliği yapmasını, projenizi oluşturmasını ve katkıda bulunmasını kolaylaştıran Github veya benzeri aracılığıyla paylaşmanızı önerdiğimi de eklemeliyim.
Odadaki filden bahsedilmiyor, yeniden üretilebilirlik?
@jamesqf: Etkili olması için abarttım, ama benim düşüncem bu. Çoğu bilimsel yazılım, kısa bir ilke kanıtı, atılabilir koddur. Nadiren küçük bir grubun dışında serbest bırakılır ve benim deneyimlerime göre kötü yazılmıştır. Makul bir ölçekte * dayanan çoğu bilimsel yazılım * korkunç değildir (bazılarıyla benzer bir zaman ölçeğinde de çalıştım): birden fazla yayın üretmek olamaz. Ama burada "bilim adamları tarafından yazılan tüm kodlar" hakkında düşünüyorum.
@mmalmeida Kabul ediyorum, Github işbirliği için bir kanaldır. Sorunlar ve dönüm noktaları, sorunları ve geliştirme isteklerini izlemenin bir yolunu sunar. Daha önce, bu kodu açık kaynaklı olarak, temizlemek için biraz zaman ayırmanızı veya en azından ona açıklayıcı yorumlar eklemenizi tavsiye ederim.
@jamesqf Çoğu korkunç. Ayrıca bilgilendirilmiş bir fikrim olduğunu da söyleyebilirim. Kodun nasıl çalıştığı, bir programcı için kodun "iyiliği" için bir kriter değildir, en azından biri iyi olarak kabul edilir. Doğruluk "olmazsa olmaz" bir özelliktir. Iraksama oranı, sayısal kararlılık, hız (donanıma özel optimizasyonlar hariç) vb. Kodun uyguladığı * algoritmanın * özellikleridir. Aynı şeyi yapan iyi kodunuz ve kötü kodunuz olabilir. Her ne kadar "iyi" nin çok belirsiz olduğunu ve çoğu zaman yanlış anlamaya yol açtığını kabul etmeme rağmen. "Kod kalitesinin" çoğu zaman korkunç olduğunu söyleyebilirim. Program * harika çalışsa * bile.
@jamesqf: karşılaştığım çoğu bilimsel yazılım, herhangi bir kaynak kontrolünde değildi ve bu başka bir örnek gibi geliyor (veya neden hala orada olan tüm başarısız girişimler).
@RemcoGerlich: Pekala, 'iyilik' için farklı kriterlere sahip olmanın bir örneği var. Henüz belirgin bir tasarım kusuru olmayan bir kaynak kodu kontrol sistemi bulamadım: Dosyaları sistemden kontrol etmek, zaman damgasını son değişiklik zamanına değil, kullanıma alma zamanına sıfırlar. Bu sistemlerin uygulayıcıları açıkça bunun 'iyi' bir özellik olduğunu düşünüyorlar - bununla ilgili birkaç kullanıcı forumunda tartışmalarım oldu - ancak sonuç, açıkça bunun için ücret almadığım sürece sürüm kontrolünü kullanmıyorum.
@jamesqf: bunu kişisel olarak algılamaz, ancak bu, kaynak kontrolünü kullanmamak için aptalca nedenler listesinde oldukça üst sıralarda yer alır (ayrıca, "normal" VCS'lerde bu "büyük tasarım kusurunu" "düzeltmek" için belki 20 satırlık bir komut dosyası gerekir. ).
@jamesqf Dosya zaman damgasını hiç görmedim, * hiç *. Herhangi bir şeyi etkilediğini bile düşünebildiğim tek durum "make" dir ve temiz bir ödeme yaptığınızda, yeniden inşa edilmeleri gerekip gerekmediğini kontrol edecek ikili dosyalar yoktur. Kaynak kontrolünün faydaları açıktır: değişiklikleri izleme (pratikte * inanılmaz * değerlidir), kayba karşı koruma, meslektaşlarla daha kolay paylaşım ve insanların aynı anda aynı kod tabanı üzerinde çalışmasını sağlama. Sorununuz son derece belirsiz görünüyor ve bahse girerim ki bu faydalar tek başına sizin özel kullanım durumunuzun dezavantajlarından ağır basıyor.
Sage projesi (http://www.sagemath.org), kodlama uygulamasıyla ilgili sürekli tasarım tartışmaları ve şikayetleri olmasına rağmen, * korkunç olmayan * matematik araştırma yazılımlarının yaşayan bir örneğidir.
@jpmc26: Dosya süreleri nasıl önemli olmayabilir? Belki de yalnızca bir kod kümesi üzerinde çalışırsanız, o kadar önemli değillerdir, ancak her biri birçok dosyaya sahip (benim deneyimime göre tipik bilimsel yazılım) birçok farklı kodunuz varsa, şu adresleri görebilmek gerçekten yararlıdır: bir bakış (örneğin 'll *. [chyl]' yaparak tam olarak hangi dosyalar üzerinde ne zaman çalıştığınızı yapın. Şimdi DOĞRU ÇALIŞAN bir kaynak kodu kontrol sisteminin sahip olunması gereken harika bir araç olacağını kabul ediyorum. Sorun şu ki! @ # Onları oluşturan $ s bu gerçekten basit düzeltmeyi uygulamayı kesinlikle reddediyor.
@jamesqf Commits (çoğu kaynak kontrol sisteminin çekirdeği) zaman damgalarına sahiptir. Örneğin git'te, veri dosyalarınızın her değişikliği için bir kayıt oluşturun, örneğin "XXX revizyonundan yeni kodu kullanarak simülasyonu yeniden yapın". Her kod değişikliği için, "YYY nedeniyle XXX kodunda iyileştirilmiş kod" yazan bir taahhütte bulunun. Ardından, dosyalarınız için bir "son değişiklik tarihi" yerine, ne zaman oluştukları, tam olarak hangi dosyaların eklendiği / değiştirildiği / silindiği ve faydalı bir yorum ile birlikte güzel bir kayıt listesi alırsınız. Yapılması gereken bir düzeltme yok, sadece kaynak kontrolünü nasıl düzgün kullanacağınızı bilmiyorsunuz.
Bu özelliğe ** gerçekten ** ihtiyacınız varsa, herhangi bir kaynak kontrol yazılımının bir dosyanın en son ne zaman değiştirildiğini sormanıza izin verdiğinden bahsetmiyorum bile. Aslında çoğu, bunun ötesine geçecek ve size bir dosyada en son hangi işlemenin etkilendiğini söyleyecek ve size zaman damgasına ek olarak değişikliğin bağlamını sunacak, bu da "ah, bu dosyayı en son 26 gün önce değiştirdim , .Txt dosyama baksam, orada ne yaptığımı görsem iyi olur ... oh, bekle, yazmayı unuttum, oops ".
@jamesqf Thomas başardı. Neyin, ne zaman ve nasıl değiştiğini görmek için işleme geçmişine bakarsınız. Farklı bir araçla, dosyaların önceki ve mevcut sürümlerinin (hatta önceki iki sürümünün) satır satır karşılaştırmasını bile görebilirsiniz. Kaynak kontrolünüz bu bilgiler için yetkili kaynak haline gelir. Bu aynı zamanda tarihi başkalarıyla paylaşmayı çok daha kolaylaştırıyor, akademik topluluk için değerli olacağını düşündüğüm bir şey. Yan not olarak, genellikle ilgisiz kod tabanlarını farklı depolara koymalısınız. Bu, geçmişleri ayrı ayrı görüntülemenizi sağlar.
@Thomas: Üzgünüz, ama bu geliştiricilerden aldığım BS'nin aynısı: ya sizin çalışmanızı istediğimiz şekilde çalışın ya da kaybolun. Üzgünüm, ama size göre çalışmayı denedim millet. Benim için çalışmıyor.
@jamesqf Bu durumda, çoğu VCS sisteminin istediğiniz şekilde çalışmasını sağlamak için bir kanca yazmak oldukça kolay olacaktır. İkisine birden sahip olmamak için bir neden yok.
Zaman damgalarının sıfırlanmasının nedeni, satın alma işleminizde dün değiştirilmiş bir dosya alırsanız, ancak bu sabah bir derleme yaptıysanız, çoğu derleme sistemi değişikliği almaz (çünkü zaman damgası derleme yapıtlarından daha eskiydi) . Zaman damgası ödeme zamanına ayarlandığında, yapılar çalışacaktır.
@jamesqf Beğen ya da beğenme, VCS kullanmak pragmatik bir zorunluluktur. VCS kullanmazsanız, birçok potansiyel ortak çalışan (neredeyse tüm deneyimli programcılar dahil) projenizi ciddiye almakta çok zorlanacaktır. Ve bu "yarı-dinsel" tasarım paradigmalarının itici gücü, projeyi bir sonraki teoriye genişletilebilir ve başkaları için erişilebilir kılan tarif edilemez bir zarafet arayışıdır.
@jamesqf 'Geliştiricilerin' size bunu söylemeye devam etmelerinin bir nedeni var - çünkü haklılar. Ayrıca, evet, benimki de dahil çoğu bilimsel yazılım gerçekten de oldukça kötü. Aslında sürdürmeyi düşündüğüm bir üretim projesi için yazarken ve bir araştırma makalesi için bazı simülasyonlar çalıştırmak için bir kavram kanıtı olarak yazdığımda kodu çok daha farklı yazıyorum. Şimdiye kadar gördüğüm neredeyse her araştırma kodunda aynısını gördüm. Birkaç istisna var, ancak bunlar sadece: istisnalar.
@jamesqf "Dosya süreleri nasıl önemli olabilir? Belki de yalnızca bir kod kümesi üzerinde çalışırsanız, bunlar o kadar da önemli değildir, ancak her biri birçok dosya içeren birçok farklı kodunuz varsa (deneyimlerime göre tipik bilimsel yazılımlar) , tam olarak hangi dosyalar üzerinde ne zaman çalıştığınızı bir bakışta görebilmek gerçekten yararlı. " Uh ... tam olarak bu sorun sürüm kontrolünün çözmesi gerekmiyor mu?
@jamesqf Kaynak kontrolünü aktif olarak kullanmak size sorunlara neden oluyorsa, muhtemelen iş akışınızı biraz yeniden düşünmeniz gerekir. Yaşadığınız belirli sorunları daraltabilirseniz, bunlara nasıl farklı bir şekilde yaklaşabileceğinizle ilgili sorular büyük olasılıkla Programcılar ve StackOverflow'da hoş karşılanacaktır. Bi dene. Deneyiminizi ne kadar geliştirdiğine şaşırabilirsiniz. Şunu da söyleyeceğim: git'i denediyseniz, bu sistemi öğrenmek gerçekten zor. Çok daha sezgisel olan ve iş akışınız için o kadar talepkar olmayan SVN'ye başlamak için daha kolay bir zamanınız olabilir. SVN, hiç yoktan çok daha iyidir.
Yazılımda çalışan biri olarak hiçbir kod mükemmel değildir. Ancak mükemmelliğin "yeterince iyi" nin düşmanı olmasına izin vermeyin. Başkalarının da söylediği gibi, birisi yazılımınızı faydalı bulabilir. Biraz temizlemek ve bazı yorumlar veya bir BENİOKU eklemek için zaman ayırırsanız, daha iyi :)
Korkunç bir şekilde yazılmış olan sadece bilimsel yazılım değildir. Yazılım mağazalarında ve imalat firmalarında on yıldır geliştirme yapıyorum ve size söz veriyorum kodun daha temiz bir hale gelmeyeceği. Herhangi bir yer. Güzel kod yazmak çok zordur. Kitap yazmak gibi. İlk taslak genellikle berbattır ama aslında hikayeyi anlatacaktır. Bir kitabı satmak için onu güzelleştirmeniz gerekir. Tesislerdeki paydaşlarınızı memnun etmek için, sadece hikayeyi anlatmaları gerekir.
Bu yorum dizisi, VCS hakkında konu dışı bir konuşmaya dönüştü. ** Lütfen genişletilmiş tartışmayı [sohbet] 'e taşıyın. **
GATT (İskoçya'da bir dizi doktora için test yatağı olan genetik algoritmaları kullanarak ders çizelgeleme programı) ile dalga geçtim. İşe yaradı, ancak kod çok sayıda yorumlanmış kod, kullanılmayan işlevler (önceki tezlerden), aşırı genel kod (farklı girişimleri barındırmak için) ve çok dar, kodu yan yana uyarlaması zordu. Bazen tasarlanmamış kullanımlara ayrılan kıvrımlı veri yapılarına sahip bileşik. Bu dağınıklığı temizlemek çok büyük bir görev olurdu. Ama keşif rolü için olduğu kadar iyiydi.
Blair MacIntyre
2015-01-23 03:31:26 UTC
view on stackexchange narkive permalink

Biraz temizler ve paylaşırdım. Yıllar boyunca pek çok kod yayınladım ve ayrıca verdiğiniz nedenlerden dolayı kod yayınlamadım.

Yapabildiğiniz her düzeyde gözden geçirin ve yorum yapın. "Başarısız girişimleri" bırakın ve bu şekilde yorumlayın. Neden başarısız olduklarını ve ne denediğini söyle. Bu, sizden sonra gelen kişiler için ÇOK yararlı bilgidir.

Birine yardımcı olması umuduyla, istek üzerine yayınladığınızı söyleyen bir BENİOKU dosyası oluşturun. Kodun çirkin olduğunu bildiğinizi, ancak yine de yararlı olmasını umduğunuzu söyleyin.

Mükemmel olmadığı için çok fazla insan her şeyi saklıyor!

Başarısız girişimlerde ayrılmayı onaylayamam. Bunun yerine sürüm kontrolünü kullanmalısınız. İlk denemenin neden başarısız olduğunu açıklayan kısa yorumlar eklemek, ancak asıl başarısız kodu dahil etmek aktif olarak zararlı olabilir.
@DavidZ Aksine, gösterin. Sürüm kontrolünü kullanırsanız, insanlar çalışmanızın önceki varyasyonlarını görebilir ve bu da işe yaramaz olmaktan uzaktır. Ancak burada olduğu gibi VC kullanmıyorsanız, başarısız girişimleri kaldırmayın. Bunları uygun yorumlarla başka bir dosyaya koyun. Ne kadar zararlı olabilir?
@coredump Tüm programı neredeyse anlaşılmaz hale getirebilir. Bunun olduğunu gördüm. VC kullanmıyorsanız, _kullanmaya başlayın_. Başarısız girişimleri kaldırmama önerisini desteklememin tek yolu, hayal edemediğim bir nedenle kodu VC'ye koymanızın yasaklanmasıdır, _ve_ mevcut olanı anlamak için önceki kodu görmek önemlidir. kod var (bu muhtemelen mevcut kodun da kötü olduğu anlamına gelir, ancak istisnaların olabileceğini kabul ediyorum).
@DavidZ Üzgünüm ama "Neden başarısız olduklarını ve ne denediğini söyle" iyi bir tavsiye, IMHO. Kodunuz dağınıksa ve / veya yazılım mühendisliği uygulamalarına alışkın değilseniz, lütfen olduğu gibi bırakın ve olabildiğince çok yorum yapın. Yararlı bilgilerin kaldırılması, her şeyi neredeyse anlaşılmaz hale getirebilir. Bunun olduğunu gördüm ;-). Tamam, belki de denenen tüm korkunç şeyleri göstermek ile yararlı izler bırakmak arasında bir orta yol vardır. Sanırım "biraz temizlerim" de iyi bir tavsiye.
@coredump Başarısız kodu dahil etme anlamında denediğinizi söylemek, yardım istediğinizde iyi bir tavsiye olabilir, ancak programın kendisini yazmak için değil.
Başarısız bir kodun, çalışma kodunu şaşırtmak dışında nasıl yardımcı olabileceğini anlamıyorum (hatalar net olmadığı ve örneğin "çok daha basit kod, ancak yalnızca pozitif girişler için işe yaradığı" sürece). Ama yorum yapmak neyin iyi olduğu (örneğin, "dizileri kullanmak cazip gelebilir, ancak benzersiz olmayan girişler için işe yaramazlar").
Kod bir araştırma makalesinin uygulamasıysa ve onu farklı şekillerde uygulamaya çalıştıysa, benim varsayımım çözümün açık olmadığıdır. Araştırmada, bir başkası çalışma kodunu görebilir ve yazarın ilk denediği yollardan biri olan "Bunu bu şekilde daha iyi yapabilirdim" diye düşünebilir. Bilgisayar bilimlerinde başarısızlıklarımızı paylaşma konusunda başarısız oluyoruz, bu da bazen iş kaybına neden oluyor. Benim amacım bu. Bu durumda iyi bir seçim olup olmadığı, kodu görmeden bilinemez, ancak bu görüşü paylaşan diğer birçok profesyoneli tanıyorum
Başarısız girişimleri paylaşmak, bozuk kodu çalışma koduna karıştırmaktan farklıdır, bu da kafa karıştırmak ve anlamayı engellemek dışında hiçbir şey yapmaz.
jamesqf
2015-01-23 04:26:19 UTC
view on stackexchange narkive permalink

Evet! Özellikle makaleniz ör. uyguladığınız yeni / geliştirilmiş bir algoritma hakkında veya önemli standart dışı veri analizi yaptığınız veya temelde sonuçlarınızı yeniden oluşturmanın yazılımınızı yeniden uygulamak anlamına geldiği herhangi bir şey hakkında.

Makalelerde nadiren daha fazlasını vermek için yer vardır bir taslaktan daha. Kritik ayrıntıları dışarıda bırakan (ancak kağıtla tamamen alakalı olmayan) makalelerden algoritmaları uygulamaya çalışmak için çok fazla zaman harcadığımı (= boşa harcadığımı) biliyorum.

Tekrarlanabilirlik hakkında çok doğru yorum, özellikle ikinci paragraf.
@E.P: Evet. Özür dilerim, distipikam yine ortaya çıkıyor :-)
Davidmh
2015-01-23 15:05:12 UTC
view on stackexchange narkive permalink

¿Kodunuzun dağınık olduğunu mu düşünüyorsunuz? Bana kabuslar veren bir kod gördüm (ve üzerinde çalışmaya çalıştım):

  • Beş düzey eğer Doğruysa kod aracılığıyla rastgele yerlere dağılmış.
  • Bir sıfır dizisi oluşturun, onu dereceye çevirin, kosinüsü alın ve radyanlara geri dönün. Sonra, sonucu atın.
  • Yoğun geliştirme altındaki bir yazılımda, "desteklenen mimariler" listesi o kadar eskidir (ve kendileri de söylerler) bu bilgisayarlardan birini elinize almak zor olurdu günümüzde.
  • Birkaç sürümden önce kırılmış veya değiştirilmiş özellikler olup, yine de dokümanlarda önerilmektedir.
  • Standart bir biçim girdisi kullanmaktan kendi biçimlerine kadar giden kod. Nasıl üretilir? Hiç kimse gerçekten bilmiyor ve geliştiriciler bir yanıt veriyor.
  • Derlenmeyen sürümler. (Test ettin mi?)
  • Belirli bir sırada erişmeniz gereken GUI menüleri. Aksi takdirde, bir segmentasyon hatası alırsınız ve baştan başlamanız gerekir.
  • Kod içinde dağılmış sabit kodlu yollar. Bu nedenle, / home / someguy / absurd_project / working / 'in tüm oluşumlarını bulup değiştirerek sizinkine geçmeniz gerekiyor.

Ve benim kişisel favorim , binlerce satırlık kod içeren belirli bir program, yalnızca rasgele kod bitlerini ortadan kaldırmak için yorumları kullandı, biri hariç:

Burada kartları yumrukluyoruz.

Yine de ne yaptığı hakkında hiçbir fikriniz yok.

Ve bu sadece kodun her yerinde tek harfli değişkenler, hiçbir yerde belirtilmemiş algoritmalar gibi klasik iyi uygulama öğelerinin dışında kalıyor ...

Kodunuzun kalitesiyle ilgili endişeleriniz varsa, bu muhtemelen onu ortalamadan daha iyi hale getirecek kadar önemsediğiniz anlamına gelir. Kod temizlenene kadar beklerseniz, asla dışarı çıkmayabilir ve bilimsel katkılarınız kısmen kaybolur.

Bence, önem vermeniz gereken önemli şeyler sırayla:

  1. Giriş ve çıkış formatları. Mümkün olduğunda standartları kullanın, olmadığında basitleştirin. Programınızı kara kutu olarak kullanmayı kolaylaştırın.
  2. Yorum yaptı. Fonksiyonların kısa açıklamaları, algoritmaya hızlı bir bakış.
  3. Okunaklılık. Deyimsel kod kullanmak, iyi değişken isimleri ...
  4. Yapı. Ne yapmak istediğinizi bildiğinizde bu daha kolay olur, bu genellikle araştırma kodunda geçerli değildir. Yalnızca toplulukla ilgileniyorsanız, onu yeniden düzenlemeyi düşünebilirsiniz.

Bu nedenle, yazılımınızı 1'e sahip olduğunuzda yayınlayın (yazarken 2 ve 3'ün bir kısmı gelmelidir) .

+1 ancak aynı zamanda önemli noktalar listesine uygun hata işlemeyi de eklerdim (hepsi aceleye getirilmiş araştırma kodunda çoğu zaman eksik). Özellikle, çıktıyı sessizce etkileyebilecek herhangi bir hataya özellikle dikkat edin - bu işlevin dönüş değeri gerçek sayı sıfır mı yoksa varsayılan hata dönüşü sıfır mı? (Bunları çizmeyin!) Ayrıca, hatalar ele alınmalı, ancak aşırı ele alınmamalıdır. Bozuk giriş verilerinden sessizce kurtulabilen ve şikayet etmeden çıktı üretmeye devam edebilen saf bir şekilde yazılmış "kurşun geçirmez" kod gördüm. Bir çarpışma can sıkıcı olabilir, ancak yanlış sonuçlar felaket olabilir.
3 numaralı noktaya ve başka birinin tek harfli değişken isimleri hakkındaki yorumuna bakın: bilimsel yazılımda, genellikle matematik denklemlerini doğrudan koda çeviriyorsunuz. Denklemlerdeki değişkenler tek harf ise, onları kodda değişken isimleri olarak kullanmak çok mantıklıdır. Ve daha sık yapmam gerektiğini kabul ettiğim gibi, bir yoruma denklemler için LaTeX'i dahil edin. Geri kalanı için, FORTRAN 66'da hesaplanan ve atanmış GOTO'larla hata ayıklamayı deneyene kadar gerçekten yaşamış sayılırsınız :-)
@imsotiredicantsleep'den cevap için +1. Sessizce başarısız olan kodla çalışmak zordur. Yanlış sonuçlar üretecekse, bunun yerine bir uyarı oluşturduğundan veya bir hata attığından emin olun.
Toxaris
2015-01-26 16:07:07 UTC
view on stackexchange narkive permalink

Düşük kaliteli yazılımı paylaşmanın sizin hakkınızda kötü bir izlenim bırakıp bırakmayacağını soruyorsunuz. Yazılım paylaşmanın kesinlikle iyi bir izlenim bıraktığını düşünüyorum.

  1. Bir bilgisayar bilimcisi olarak, meslektaşların kaynak kodlarını kullanıma sunmasını seviyorum. Çalışmalarına daha derinlemesine bakma, belki onlarla iletişime geçme, belki onlardan alıntı yapma olasılığımı artırıyor, çünkü etkileşimde bulunabileceğim bir eser daha var (sadece kağıt değil, aynı zamanda kod).

  2. Bir makale kaynak kodu tarafından "kanıtlanmış" bir sonucu bildirdiğinde, ancak kaynak kodu kamuya açık değilse, genellikle sonucun gerçek olup olmadığını merak ediyorum. Kaynak koduna (ya da hiç bakmadan sadece kaynak kodunun kullanılabilirliğine) bakmak beni ikna edebilir.

Yani kaynak kodunuzu paylaşmak korkunç olsun ya da olmasın, her zaman bana sizin hakkınızda iyi bir izlenim verirdi.

Şimdi, daha da fazla etkilemek istiyorsanız, yardımcı olur ...

... sorunlara tepki verirseniz veya github gibi bir sitedeki talepler, yani başkalarının sizinle iletişim kurmaya çalıştığını gördüğümde ve sizin tepki verdiğinizde.

... kodunuz, makalenizdeki iddiaları kaynakla ilişkilendiren bir benioku dosyası içeriyorsa kodu. Bu şekilde, makaleyi okuduğumda ve daha fazlasını öğrenmek istediğimde, kodda uygun yere atlamak için benioku'yu kullanabilirim. Bu tür bir benioku dosyasından tipik ifadeler şunlar olabilir: "Makalenin Sec. 3.2 algoritması dosya algoritması / newversion / related / secondtry / foo.c içindedir" veya "Çalışmayı Bölüm 2'de açıklanan küçük veri kümesiyle tekrarlamak için kağıt, "make; second_step yapmak; foo_bar_2 veri kümeleri / christmas.dataset. Bu çalışma dizüstü bilgisayarımda yaklaşık 2 gün sürüyor ".

Ayrıca, http://matt.might.net/articles/crapl/ adresinde bulunan Matthew Might's CRAPL (Topluluk Araştırması ve Akademik Programlama Lisansı) ile de ilgilenebilirsiniz. Şu terimi içerir: "Yazarı, Program dahilinde bulunan her türlü saldırı, küfür veya inanç sıçramasından dolayı utançtan, utançtan veya alay etmekten kurtarmayı kabul edersiniz." Bu "lisansın" herhangi bir yasal etkisinin olup olmadığı benim için net değil, ancak amaç açık: Çirkin kodunuzu serbest bırakın ve başkalarının çirkin kodu hakkında kötü düşünmeyin.

dotancohen
2015-01-25 17:28:40 UTC
view on stackexchange narkive permalink

Teğetsel olarak ilgili, endişelerinize göre yazılımı nasıl paylaşacağınıza değineceğim (zaten yanıt verdiğiniz yazılımı paylaşmamalısınız ).

Başarısız girişimleri etkin bir şekilde sürüm kontrolüne koymak, onları hiç kimsenin görmeyeceği anlamına gelir. Bunu halletme şeklim, her bir girişimi bir yönteme ve her başarısız girişimi ayrı bir yönteme koymaktır:

  def main (): get_foobar (x, y) def get_foobar (): return x ** ydef get_foobar_legacy_1 (): "" "Bu deneme > 100" "" değerleri için işe yaramadı return x + ydef get_foobar_legacy_2 (): "" "Bu girişim Eylül'de Çarşamba günleri işe yaramadı" "" return x - y  

Aşağıdaki yorumlara göre, bu yöntemleri ayrı bir FailedAttempts veya BadIdeas sınıfına koymak iyi bir fikirdir. Bu, gerçek ihtiyaca göre sürecin çeşitli aşamalarını bölümlere ayırmanın güzel bir etkisine sahiptir. Bilgisayar programcılarının çoğu zaman mantığı bir yönteme ne zaman ayırıp ne zaman kesmeyecekleri konusunda ustalıkları olduğunu görüyorum, ancak bilgisayar bilim adamları çoğu zaman bunu yapmıyor. Bu yaklaşım, bilgisayar bilimcilerinin gerektiğinde bir yöntem oluşturmasına yardımcı oluyor.

Bu, en iyi programlama uygulamalarının bir parçası değildir. Bazı kodlar "get_foobar_legacy_43" 'i çağırmaya devam etmesin diye, varsayılan olarak kullanılmayan kod aslında yorumlanmalıdır. Ve kırıldığı netleştiğinde, mümkünse kaldırılmalıdır. Eğer bazı başarısız girişimleri anlamak, mevcut sürümün okuyucuları için değerliyse (bu gerçekleşir), onu sürüm kontrolüne koymalı ve ilgili commit'i gösteren bir yorum eklemelisiniz. Kimlik - muhtemelen kalıcı bağlantı ile.
@Blaisorblade: Haklısınız, eğer amaç iyi işleyen bir uygulama geliştirmekse, o zaman kullanılmayan kod, yorumlama yoluyla veya kaynak kontrol yazılımının derinliklerine indirilerek kaldırılmalıdır. ** Ancak, OP'nin belirttiği hedef bu değildir. ** OP'nin başarısızlıklarını belgelendirmesi gerekir. Bunu yapmanın yolu budur. Konunuzda değer görmeme rağmen ve belki de her yöntem `/ * * /` blok yorum sözdizimi ile yorumlanabilir. İlginç bir şekilde, blok açıklamaları desteklemeyen birkaç dilden biri, yukarıdaki sözde kod için kullandığım dil olan Python'dur.
@Blaisorblade: Uygulamanın posta kodundan ayrı olarak, başarısız girişimleri kapsayan ayrı bir dosya, sınıf veya dizine sahip olmak daha da iyi bir çözüm olabilir.
Soruda belgeleme hataları belirtilmemiştir ve bunun iyi bir fikir olduğunu düşünüyorum * birkaç durumda * (örneğin, makalenin katkılarını elde etmeye yönelik ilginç ancak başarısız girişimler için). "Başarısızlıklarda bırakmak", insanların güçlü bir tartışmanın olduğu başka bir cevaptan geliyor gibi görünüyor: http://academia.stackexchange.com/a/37373/8966.
Dima Pasechnik
2015-01-25 01:16:44 UTC
view on stackexchange narkive permalink

Elbette kaynak kodunu paylaşmalısınız.

Akademik olarak konuşursak, kolayca bulunmayan bir yazılım tabanlı sonuç çok değerli değildir, çünkü gerekirse başkaları iddialarınızı nasıl doğrulayabilir? Bu amaç için kendi başlarına programlama yapmalarını mı bekliyorsunuz? İkili dosyaları paylaşmak çok daha az değerlidir ve çoğu zaman onları çalıştırmaya çalışan insanlar için kabuslara yol açar.

David1199
2015-01-23 13:23:20 UTC
view on stackexchange narkive permalink

Bence paylaşmalısın. Her şeyden önce bazı temel temizlik yapmalısınız. (örneğin: artık kullanılmayan daha önceki bir kod yok; yorumda kod yok; geçerli yorumlama yöntemi vb.) Ayrıca, koda bazı "yapılacaklar" koyarsanız, diğerleri zamanınızın dolduğunu görebilir ve görebilirler niyetleriniz. (örneğin: yapılacaklar listesi: bu enum olarak değiştirilmelidir) Ayrıca algoritmalarınızın en önemli bölümünü paylaşmanız gerektiğini düşünüyorum. Bir kodu paylaştığımda hiçbir zaman önemsiz kısımları paylaşmam. Herkes dosyaların okunmasını / yazılmasını, iş parçacıkları arasındaki iletişimi, gui vb. Ancak okunamayan kodu paylaşmayın. Hiç mantıklı değil. Bu yüzden orta yolun çoğu kez en iyisi olduğunu düşünüyorum. :-)

Temizlik prensip olarak iyidir. Ancak, biri temizlemek için iyi bir zaman beklerse, o zaman asla gerçekleşmeyebilir. Hemen Github veya Bibucket veya benzeri bir sürüm kontrol havuzuna koymanızı ve etrafta dolaşırken temizlemenizi öneririm. Zaten indiren herkes esas olarak HEAD'e bakacaktır.
J.R.
2015-01-26 04:47:31 UTC
view on stackexchange narkive permalink

Bilgisayar bilimleri bölümünüzdeki bazı profesörlerle konuşun. Öğrencilerin dağınık kodu temizleyerek daha kolay anlaşılır hale getirebilecekleri bir proje arayanlardan herhangi birinin olup olmadığına bakın.

Kodu revize eden öğrenciler için bu iyi bir öğrenme deneyimi olabilir. Kodlayıcılar önce sonuç odaklı program yaptığında veya yalnızca sonuç odaklı olduğunda ne olur? Bunu ilk elden görecekler. Ayrıca öğrendikleri bu en iyi uygulamalardan bazılarını da uyguluyorlar. Ve diğer profesyonellerin zaten kodu görmekle ilgilendiğini bilerek özellikle iyi bir iş çıkarmaya motive olabilirler.

Bir profesör bunu bir yarışmaya bile dönüştürebilir, öğrenci ekiplerinin hepsi yazılımı gözden geçirmeye çalışır ve en iyi sonuç dünyanın geri kalanıyla paylaşılır.

Yeniden düzenleme çabaları başarısız olursa, olduğunuzdan daha geride değilsiniz. Durum buysa, feragatnameler harika bir şeydir. Sadece kodu paylaşın, ancak bir uyarı ekleyin: "Güzel değil. Bunu yazdığımda, araştırmamı yapmaya çalışıyordum - bilgisayar laboratuvarımın dışına çıkacağını hiç düşünmemiştim. Ama rica ederim gerçekten istiyorsanız bir göz atmak için. "

Bunu sevdim, Üniversitede iken bu şansı elde etmeyi çok isterdim. Başkalarının kodunu okumak ve anlamak bir beceridir ve öğrenilmesi gerekir.
O. R. Mapper
2015-04-02 16:49:06 UTC
view on stackexchange narkive permalink

Kodun yayınlanması lehine pek çok nokta diğer cevaplarda belirtildi ve bunlara tamamen katılıyorum. Bu nedenle, kodun yayımlanmasının temel istenirliği tartışıldığı için, bunu, dikkate alınması gereken diğer noktaların bir kontrol listesi ile tamamlamak istiyorum. Bu sorunların çoğu muhtemelen hemen hemen tüm akademik yazılımlarda ortaya çıkmaktadır, bu nedenle "Bu projem için geçerli değil" yanıtını veremeseniz bile. hepsine, kodunuzu yayınlamadan önce en azından "Bu bir endişe, ancak bu sorunu çözerek ..." şeklinde yanıt verebilmelisiniz:

  • kodu yayınlama izniniz var mı?
    • Yalnızca yeniden dağıtmanıza izin verilen kod parçalarını kullandığınızı garanti edebilir misiniz? Yoksa açık olmayan kaynaklardan kod mu kullandınız? kendi dahili yazılımınız için kullanabileceğiniz, ancak yayınlamanıza izin verilmediğini? Kullandığınız tüm kodun tek bir pakette yayınlanmasına izin verildiğini garanti edebilir misiniz? Lisans uyumluluğu önemsiz olmayan bir sorundur.
    • Hatta güvenilir bir şekilde öğrenebiliyor musunuz? Kodlama çalışmanızın herhangi bir bölümünü dış kaynak olarak kullandınız mı veya başka bir yerden yayınlanmamış kodu entegre ettiniz mi? Örneğin, mezuniyet tezleri sırasında herhangi bir öğrenciye nezaret ettiniz mi veya çalışmaları araştırmanıza dayanan ve bu nedenle kodları kod tabanınıza eklenmiş olan herhangi bir öğrenci araştırma asistanı istihdam ettiniz mi? Herhangi bir iş arkadaşınız kod tabanınıza kod kattı mı? Kodlarının bir kısmını öğrencilerden mi aldılar? Dahil olan tüm bu kişiler lisans konularına gerektiği gibi dikkat ettiler mi (eğer bu lisanslama soruları hakkında eğitimli bir yargıya varacak bilgiye sahiplerse)? Kodun hangi bölümlerinin nereden kaynaklandığı hala belirlenebilir mi? Her bölüme katkıda bulunan insanlar hala biliyor mu? Hâlâ sizin için "iletişim menzilinde" mi?
    • Kod, çalışma süresinde üçüncü taraf fonlarına göre mi geliştirilmişti? Öyleyse, finansman sözleşmesi koşulları kodun yayınlanmasına izin veriyor mu yoksa finanse edilen proje dahilinde oluşturulan yazılımın yalnızca proje ortaklarıyla paylaşılması gereken herhangi bir gereksinimi içeriyor mu?
  • Kodu ve yorumlarını temizlemek için çaba harcayacak kadar yeterli kaynağa (zaman veya başka türlü) sahip misiniz? yine de anlamlı olacak, ancak kamuya açık hale getirilmemeli mi?
    • Kod üzerinde çalışanı başkalarına veren yorumlarınız var mı? Kodu katkıda bulunan kişilerin, fonlarına göre ilgili araştırmada çalışmalarına resmi olarak izin verildi mi? ? (Yazılım geliştiricileri, takım çalışmasının ve bileşenlerin yeniden kullanımının yazılım geliştirmenin temel yönleri olduğunun farkındadırlar. Fon sağlayan kuruluşlar, maalesef, genellikle bundan habersizdirler ve eğer geliştirici A X projesinden ve geliştirici B'nin Y projesinden finanse edildiyse, A, yalnızca X ve B üzerine yapılan çalışmalar, yalnızca Y üzerinde çalışır ve wlog, A'nın Y projesinde sona eren bir şeyi yapmak için yalnızca yarım saat harcadığını, finansmanın bazı kısımlarını geri almak gibi ciddi sonuçlara yol açabileceğini ortaya koyar.)
    • Yayınlanan verilerdeki herhangi bir şey, işin nasıl yapıldığına dair kamuya açıklanmaması gereken özellikler hakkında herhangi bir bilgi veriyor mu? Bu, özellikle bir VCS'deki tüm taahhüt geçmişi, kamuya açık hale gelebilir (veya pratik olarak, taahhüt tarihinin asla yayınlanmaması gerektiği anlamına gelir), ancak başka durumlarda da rol oynayabilir. Örneğin: Resmi olarak atanan çalışma saatleri dışında (örneğin hafta sonları) kod üzerinde herhangi bir çalışma yapıldı mı? Çalışma süreleri, günlük çalışma saatleri için ülkenizin yasal sınırının üzerinde çalıştığınızı gösteriyor mu? Çalışma saatleri, yasal olarak gerekli molalara uymadığınızı gösteriyor mu? Çalışma süreleri, başka projelere atanan kişilerin katkı sağlamasına neden oluyor mu? Çalışma süreleri, çalışma sürelerinizle ilgili olarak aksi belirtmiş olduğunuz herhangi bir ifadeye güvenmemek için herhangi bir neden sağlıyor mu (örneğin, belirli maksimum tahsislerle önceden tanımlanmış çalışma paketlerine ayrıntılı bir çalışma süresi atanmasını gerektiren proje başarı raporlarında)? Çalışmamanız gereken durumlarda çalıştığınızı belli eden herhangi bir şey var mı (örneğin bir proje toplantısı sırasında)? Çalışmamanız gereken yerlerde çalıştığınızı gösteren herhangi bir şey var mı (örneğin, evden, sözleşmenizin ev ofisi yapmanıza izin vermediği durumlarda, örneğin sigortayla ilgili komplikasyonlar için)?
    • Kodda, şifreler, kullanıcı hesabı adları veya URL'ler gibi herkese açık olarak bilinmemesi gereken gizli bilgiler var mı? (Çünkü sunucular, az sayıdaki seçkin kişiden daha fazla sayıda kullanıcıyı işleyecek şekilde düzenlenmemiştir. Kime test kurulumu için URL şahsen verildi)?
  • Kod başkaları tarafından kullanılabilir mi?
    • Kod çalışacak mı yoksa kapsamlı yapılandırma çalışmaları mı gerektiriyor? Hangi yapılandırmanın gerekli olduğunu açıklamak için gereken çabayı harcayabilir misiniz?
    • Kod derlenebilir mi? Herkese açık olmayan resmi olmayan değiştirilmiş veya özel olarak oluşturulmuş derleyiciler kullandınız mı? Öyleyse, kod, makalelerinizde sözde kod algoritması olarak sağlanabilecek olanın ötesinde bir şey ekliyor mu?
    • Kod herhangi bir harici kaynak gerektiriyor mu? Yalnızca kod şu veya bu nedenle kodla birlikte yayınlayamayacağınız sunuculara, kitaplıklara veya veri kümelerine erişebiliyorsa yararlı olabilir mi? Bu kaynakların en azından bir açıklaması sağlanabilir mi, yoksa arayüzleri bir tür NDA'ya tabi mı?
    • Kod, üzerinde çalıştığı sistemlerde geri döndürülemez değişiklikler yapıyor mu? Örneğin, herhangi bir sistem yapılandırmasını otomatik olarak değiştiriyor mu (sistem arama yolunun üzerine yazmak gibi)? Bazı takımyıldızlarda (test kurulumlarınızda dahili olarak kaçındığınız) herhangi bir bileşende kalıcı hasara neden olabilecek donanım bileşenlerine herhangi bir düşük seviyeli erişim gerçekleştiriyor mu? Kullanıcıları bu tür olası istenmeyen yan etkilere karşı güvenilir bir şekilde uyarabilir misiniz?
Yasal sonuçları belirlemek için işlem kayıtlarını gözden geçiren fon ajansları veya işverenleri düşünürsünüz. Bu açık bir teorik endişe. Öyleyse, bunun olduğuna dair herhangi bir kanıtınız var mı? Finansman kurumlarıyla, özellikle ERC hibeleriyle olan sınırlı deneyimim, bu sayılmasa da aslında tam tersidir.
@Blaisorblade: "Peki, bunun olduğuna dair herhangi bir kanıtınız var mı?" - Fon verenin maliyetlerini azaltma olasılıklarını keşfetme motivasyonu açık görünüyor ve uygulanabilecek olası yansımalar (hibe parasının bir kısmını geri ödemek) yeterince şiddetli (önceden verilmiş parayı kaybetmek muhtemelen yapabilecek birkaç şeyden biridir. en başta bu olası saldırı noktasını açmamanın makul göründüğünü düşünerek, üniversite çalışanlarını üniversite yönetimiyle ciddi bir sorunla karşı karşıya getirin.
King
2015-01-24 23:32:51 UTC
view on stackexchange narkive permalink

Elbette. İyi bir yazılım yazmada daha iyi olmanın tek yolu geri bildirim almaktır (her türden). Geri bildirimden korkuyorsanız, gerçekten çok uzağa gidemezsiniz. Harika bir yazılım yazmanın üç temeli alıştırma, uygulama ve alıştırmadır.

Şimdi, insanlar yazılım yazma becerilerinizin birinci sınıf olmadığını öğrenirse bunun kariyerinize zarar verip vermeyeceği sorusuna gelelim. Sanırım hayır, aksine akademik dürüstlüğünüz için size saygı duyacaklar. Ve sizinle işbirliği yapmayı dört gözle bekliyorum.

lovelyzlf
2015-01-24 23:11:47 UTC
view on stackexchange narkive permalink

Projenizle ilgilenen diğer kişilerin kodunuza kolayca erişmesi ve belki de kodunuzu iyileştirmeye yardımcı olmaları ihtimaline karşı bunu GitHub 'a aktarabilir ve bir projeyi sürdürmeye çalışabilirsiniz.

+1 - Bu aklıma gelen ilk şey.Birinin kodunu saklamak için, ölecek veya kaybolacak bir sabit disk veya USB çubuğunda gizlenmesinden daha güvenli bir yerdir.Ek olarak, kodun bakımı ve izlenen herhangi bir kod değişikliği kolayca yapılabilir ve sizin de söylediğiniz gibi diğerleri işbirliği yapabilir ve katkıda bulunabilir (doğru erişim ayarlarının seçilmesi şartıyla).
user28382
2015-01-25 11:03:30 UTC
view on stackexchange narkive permalink

Evet, yapmalısınız. Sonuçta, Linux çekirdeği kaynak kodu oldukça karışık ve bu, birçok profesyonel geliştiricinin onu incelemesini ve ona yamalar ve eklemeler eklemesini engellemedi. Unutmayın ki Linux çekirdeği, dünyadaki en hızlı ve en güçlü süper bilgisayarları ve çoğu cihazı çalıştıran işletim sisteminin temeli. Linux çekirdeği kaynak kodunun dağınık olmasından olumsuz etkilenmiş veya herhangi bir şekilde zarar görmüş.

jwg
2015-01-26 16:51:34 UTC
view on stackexchange narkive permalink

Kimsenin neden kodunuzu paylaşmanız gerektiğinden bahsetmemesinin bir nedeni, sizinle işbirliği yapmakla ilgilenen, ancak kodu temizlemek ve farklı sistemlerde çalışmasını sağlamak için daha fazla zaman harcamaya hazır birini bulmanız olabilir. vb., yaptığınız yenilikçi geliştirmeyi yapmaktan çok.

Pek çok insan bu tür işleri çok tatmin edici buluyor ve eğer kodunuz gerçekten onlar için yararlıysa, bunu yapmaktan mutlu olabilirler. Her durumda, onu kullanmaya çalışan ancak bir tür yardıma ihtiyaç duyan insanlardan geri bildirim almanın, onu daha sürdürülebilir / kullanımı ve anlaşılması daha kolay hale getirmek için iyi bir motivasyon olduğunu fark edebilirsiniz.

Zuberi
2015-01-24 14:50:29 UTC
view on stackexchange narkive permalink

Kodunuzu kesinlikle paylaşmalısınız.

Bir şeyleri sıralamak için, başarısız bir girişimin bir bölgesini yapmak gibi kodun aynı parçalarının bölgelerini yapın ve neden başarısız olduğunu açıklayın. Ayrıca, Visual Studio'da geliştirme yapıyorsanız, Extension Manager'dan "CodeMaid" uzantısını yükleyin ve eksiksiz çözümünüzü temizleyin. Boşlukları kaldıracak ve kullanılmayan referansları kaldırarak çoğu şeyin daha iyi görünmesini sağlayacaktır.

C # ile geliştirirseniz kodunuzu benimle paylaşın. Ayrıca işleri halletmenize yardımcı olabilirim :)

@PeterMortensen: [Lütfen yalnızca birinin tıklamak istemesi için makul bir şans varsa bağlantıları ekleyin.] (Http://meta.academia.stackexchange.com/q/1252/7734)
@Zuberi005, kodu temizlemeye yardımcı olacak otomatik bir * çözüm * sunan tek kişidir ve kodu temizlemeye kişisel olarak yardımcı olabilecek tek kişidir. Ve birisi olumsuz oy mu verdi? Ayıp onlara!
CaptainCodeman
2015-01-25 20:15:12 UTC
view on stackexchange narkive permalink

İsterseniz paylaşın, istemiyorsanız paylaşmayın. Bunun kulağa tuhaf geldiğini biliyorum ama bence bugünlerde "her şeyi paylaşmak" için çok fazla baskı var ve insanlar paylaşmadığınız için sizi suçlu yapmaya çalışacaklar, ancak gerçekten hiçbir şey paylaşma zorunluluğunuz yok.

Tekrarlanabilir sonuçlar, bilimsel yöntemin temel taşlarından biridir. Ve bu paylaşım gerektirir. Yorumunuz "... ama gerçekte, Bilim adamlarının bilimsel yönteme uyma zorunluluğu yoktur" demeye benzer.
Elbette, paylaşım bilimsel topluluğun * dışında * isteğe bağlı olabilir, ancak bilimsel topluluk içinde kesinlikle isteğe bağlı * değildir.
@Contango Evet, eğer yazılımı serbest bırakmak, sonuçları yeniden üretmeye yardımcı oluyorsa, bu adil bir noktadır.
@JeffE Hiçbir şey paylaşmadım, neden bahsediyorsun? Mesajınızı şifreli buluyorum. Anlaşılmak istiyorsanız, lütfen biraz daha açık olun.
Elbette fikrinizi paylaştınız.
user168715
2015-02-12 08:54:28 UTC
view on stackexchange narkive permalink

Kodun "olduğu gibi", herhangi bir destek vaat etmeden sağlandığına dair bir sorumluluk reddi beyanı ekleyin. Ardından kodu paylaşın.

Örnek olay: İzole noktalar bulutunu su geçirmez bir yüzeye dönüştürme robotikten bilgisayarla görmeye ve Microsoft Kinect gibi 3D sensörlerden gelen verileri işlemeye kadar her yerde kullanılan son derece önemli bir pratik sorundur.

Poisson yüzey rekonstrüksiyonu 7 yaşında ve uzun zamandır en son teknoloji olmayı bıraktı. bu sorunu çözmek. Ama bugün hala herkes kullanıyor. Neden? Çünkü yazar kodu yayınladı ve o zamandan beri bir dizi popüler geometri işleme kitaplığına dahil edildi. Gazetede şu anda binin üzerinde alıntı var.

erwin
2015-04-01 19:22:14 UTC
view on stackexchange narkive permalink

Evet. Kodunuzu, muhtemelen CRAPL lisansı altında yayınlamalısınız. Amaç daha iyi bir gelecek inşa etmektir - ve sizin berbat kodunuz insanların bunu yapmasına yardımcı olacaktır. Bir uyarı, kodun başarılı bir şekilde nasıl çalıştırılacağını, birinin yayınlanan herhangi bir sonucu yeniden üretme şansına sahip olacak kadar belgelemeniz gerektiğidir.

Ve endişelenmeyin - üzerinde çalıştığım bir parça araştırma kodu Yaklaşık 8 yıl boyunca bir dizi proje için 5 kayıtsız programlama yeteneği postdoc tarafından geliştirilmiştir.

Genel değişkenlerin listesi (sadece isimler) kabaca 4 sayfaydı.

Bunların kabaca üçte biri, belirli bir anda çalışan işlevselliği değiştirmek için varsayılan davranışı ayarlamak için kullanıldı. Diğer% 20'si paralel veri yapılarıydı - yani yaklaşık olarak aynı verileri depoladılar - ve bu nedenle veri yapılarından az çok rastgele çekilen koddaki işlevler. Evet. Bazen senkronize olmadılar. Ve bazen senkronize olmaması gerekiyordu.

Grubun sunucusunun rastgele bölümlerinde depolanan kabaca 50 belgelenmemiş sürüm vardı - her biri en az bir belirli amaca hizmet ediyordu - ve yalnızca bir yönetici bu belirli amaçlara sahipti kafasında. İnsanların belirli bir amaç için 'yanlış' sürümü kullanmamasından daha yaygındı.

İnanılmaz derecede karmaşık yinelemeli prosedürlerin, örneğin bir dosya yazmak için kullanılması standarttı. Cidden - görüntü sonuçlarını kaydetmek için birkaç bin satır.

Oh, ve hiçbir zaman yeni bir değişken oluşturarak bir bellek sızıntısını (aslında görünmez bir figür) çözmeye yönelik kasaplık bir girişimin kalıntıları.

Oh, ve veritabanı, o güzel veritabanı. Verilerin yaklaşık yarısı (a) veritabanı tasarım hataları (b) veri giriş hataları (otomatik programlarda) nedeniyle kullanılamaz durumdaydı. Veritabanından dosya alma kodu birkaç yüz satır mantık uzunluğundaydı ... Veritabanının kendisi de aynı verilerin birçok kopyasını içerecek kadar nazikti, çoğu tablolar arasında kopuk bağlantılar vardı. Kısıtlamalar? Hayır. Bir istatistikçinin, veri tabanına emanet edildikten sonraki bir ay içinde huzursuzluktan korkudan ağlamaya ve bırakmaya doğru ilerlemesini izledim ...

Yazılımı çalıştırmanın ve doğru sonuçları almanın 0 ile 1 arasında bir yolu vardı herhangi bir anda ...

Ve evet, gotos vardı.

Oh, ve opak ve belirleyici olmayan operasyon sağlamak için GUI aranarak bir dizi hesaplama yapıldı

Verilen herhangi bir işlevin yaklaşık% 90'ı, oldukça güvenilir bir şekilde sonuçla veya sonucun hata ayıklamasıyla alakalı değildi - kısa vadeli projelerden ziyade, eklenen ve sonra asla kaldırıldı. Cidden - gerçekten işe yarayan tam bir özellik sürümü yazdım, bu boyutun 1 / 10'u ... Önemli kesirler kopyalanarak yapıştırılan eklenen işlevlerdi ve çoğu birbirinden farklıydı.

Ve Virginia yok belge yok. Veya açıklayıcı değişken isimleri.

Oh, ve artık var olmayan kod kullanılarak oluşturulmuş belgelenmemiş, hatalı, dll'ler ve ilişkili kütüphaneler.

Hepsi Matlab'da yazılmıştır. Matlab kodlama uygulamaları açısından, bol miktarda eval kullanımının günün en önemli anı olacağını varsayalım.

Cidden, kodunuz o kadar da kötü değil.

Bununla birlikte, gerçekten yararlı bir şey yaptıysanız, başkalarının kitaplığınızı kullanması ve bunlardan alıntı yapması için temizlenmiş bir sürüm yayınlamak kariyerinizi geliştirebilir. Az önce bir şey yaptıysanız, çoğaltma muhtemelen gitmeniz gerektiği yere kadardır.



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...