那裡有一些很好的答案,我想在這個問題上投入我的兩分錢,因為這是我經常考慮或與同事討論的一個非常相關的問題。現有答案的某些部分不可避免地會出現一些重疊,我只希望在這些情況下能給出稍微不同的觀點。
我已經完成了應用數學專業的學習,並完成了碩士課程。生物學&醫學建模(無論這意味著什麼)。我在生物信息學和系統生物學上的博士學位研究已經結束了一半時間。我幾乎專門從事 silico 的工作,並為許多怪異,醜陋和可悲的軟件感到驚訝。
首先,我認為您在提出問題時犯了一個小而重要的錯誤。您說:
“ 為什麼許多才華橫溢的科學家編寫可怕的軟件?”
我反而建議
“ 為什麼由才華橫溢的科學家編寫的軟件最終變得可怕?”
差異很細微,但對於我的其餘回答來說卻至關重要。畢竟,這不像科學家們圍在桌子旁,決定來編寫可怕的軟件。
許多編寫代碼的科學家都沒有受過編寫軟件的教育
那裡知道如何編碼與知道如何編寫軟件之間的嚴重區別。在本科和碩士期間,我在計算機科學係從事的課程幾乎與數學一樣多,因此我對自己的編程技能充滿信心。直到我遇到諸如打包,依賴管理,生命週期,許可等問題為止。在我學習期間,這些都不是遙遙無期的課程。我不知道那些從事CS作為本科生的人是否會學習這些概念,但是我敢肯定,直到我突然不得不了解它們之前,地獄永遠不需要。
許多編寫代碼的科學家的老闆/主管都沒有受過編寫軟件的教育
您不僅需要學習大量新知識,而且想像您無法向老闆解釋為什麼這對您學習這些知識很重要。我經常遇到這個問題,因為編寫代碼的能力通常與在我們部門進行的工作相當。人們認為編寫代碼只是獨立進行的,最好是快速進行。我經常與同事討論,他們開玩笑地提到他們想听我的只是“計算機說是/不是?”。新事物可能要花多長時間常常被低估了,必須連續編寫測試通常被視為浪費時間。這讓我想起了下一個話題。...
學術界對好的軟件沒有重視,至少與行業不一樣。
學術界對能力的衡量是出版物,貨幣形式為引文。您會不斷地以競爭的方式提出新的有用的東西,只有那裡的第一個才有機會獲獎。在學術界,克隆不存在或存活得特別長。相反,在行業中,您可以通過更好的廣告,更涼爽的GUI或更低的價格來贏得市場份額。在學術界,如果已經發布了某種方法,則需要做其他事情。
類似地,如果您已經發布了一種方法,則該原理證明的其他功能,清理,優化等該軟件通常不夠好,不能保證可以發行新出版物,這實際上意味著您白白浪費了數月的工作。悲傷但真實...
期望發生變化,您必須期待意外的情況
可能只是個小問題,但我不能強調得太重,因為它一遍又一遍地咬我。您只是沒有為新項目獲得適當的規範。它們通常過於模糊,或者過於嚴格(實際上是不現實的)。有時,從未提到的某些東西是隱含的期望。然後增加傷害的傷害是,基於新的數據格式,某些其他數據庫,新功能或老闆不在會議上時正在考慮的其他很酷的事情而更改規格...您編寫和重寫解決方案
您通常得不到所需的支持
少數幾個編程博士學位的學生,我們試圖通過保持最新來提高自己與趨勢。例如通過SO學習最佳實踐。但是,當您想嘗試新事物時,常常會遇到阻礙。 IT部門認為您太討厭了,或者老闆認為您很懈怠,或者您正在尋求幫助的人都認為您不了解而浪費了他們。時間。例如,我花了幾個月的時間來回協商和來回郵件,以便能夠在家中訪問我們的版本控制服務器。最終,它可以更快地跳過某些最佳實踐。
對於不是專家的人來說,最新的最酷的CS趨勢並不總是被很好地記錄下來。
我試圖嘗試使用幾種“新”技術來弄髒自己,陡峭的學習曲線。有時確實不值得付出努力。我最好的例子是Maven。當我經常使用Java時,我認為我應該使用現代工具進行打包和依賴管理。但是,在與之抗爭了這麼長時間之後,我的結論是@%& $它!我真的沒有精力或時間去閱讀那些混亂的文檔。
底線
在經歷了這些年來的痛苦之後,我得出以下結論,這給了我一些內心的平靜:
“ 我不是軟件開發人員。也不是寫軟件的付費。寫軟件不是我的工作;學會解決某些問題是是。”
希望這個答案會給您了解為什麼科學家(特別是天才或其他方面)編寫的軟件經常不符合軟件開發人員所建立的標準。