2009-06-01 67 views
3

我們正在開發視頻模式識別軟件。我們有7位正在創建算法的數學家。此外,我們有2個開發人員使用這些算法維護/開發應用程序。問題在於數學家正在使用不同的開發工具來創建像Matlab,C,C++這樣的算法。另外,因爲他們不是開發人員,所以不要太在意內存管理或多線程。這是應用程序的原因之一。有很多錯誤。開發算法和開發人員的人員之間最有效的工作流程是什麼?

如果在貴公司你有類似的情況,你如何處理它?建議您創建算法的最佳工具是什麼?數學家和開發者之間應該進行什麼溝通?您認爲最有效的工具是使用高級工具嗎?

+3

開發人員是否在翻譯數學家的作品,或者是否接觸數學家的代碼? – Svante 2009-06-01 20:23:33

回答

3

我同意Makach。

讓創建算法的人使用他們最熟悉的工具。因爲在這個項目中有兩個獨立的(同樣重要的)任務。首先,創建一個高效,優雅和適當的數學聲音算法,然後將其轉化爲CPU說話的任務非常困難。數學家應該把重點放在他們的第一項任務上,並讓他們更容易,讓他們使用他們感到舒服的託辭。在工作時間方面,編寫MATLAB代碼比用他們的時間更有效地利用他們的時間,而不是讓他們學習一種新的編程語言。

你的任務是挖掘的(大概)輝煌數學是埋在雜亂的代碼中。

這部分只是關於手頭問題的一個觀點。這是實際的答案。

溝通,相互尊重和教學/學習。

通信&相互尊重

你必須與他們經常通信。與他們密切合作,並在遇到你不確定的事情時向他們提問。當相互尊重時這更容易,這意味着如果你花時間批評自己的編碼能力,那麼他們將被迫花時間批評你的數學能力。相反,嘗試快速學習會話。 (「午餐&學習」是一個相當普遍的戰術)

教/學

第一個也是最重要的棋子智慧傳授給他們的評論。讓他們評論他們的代碼廢話。告訴他們這些評論比代碼質量更重要,只要他們的評論是正確的,他們可以將其餘部分留給你們。因爲他們可以。他們不需要讓他們的代碼看起來很漂亮,因爲速度最快,他們只需要讓它們對你們有意義。

要繼續這種相互學習的情況下,如果你注意到他們正在一些很簡單很常見的錯誤,(什麼幾乎一樣複雜的多線程),只是給他們一個快速的擡起頭來。 「這種方式可行(或不),但這是一種有點不同的方式,但它會讓你的生活變得容易得多。」鼓勵他們通過試圖注意你和你的團隊遇到的困難或算法中的哪些細微差別,並教一些關於它的小教程來回報他們。

一旦你們的溝通流暢起來,你會發現將自己的編碼風格塑造成最適合你的團隊的方式會更容易,也更容易理解,爲什麼你看不到它他們也是這樣。另外,正如Kekoav所提到的,確保他們提供了幾個完全加載的測試用例。 這意味着這樣的事情

甲 - >乙 - 「ç - > d - >解決方案

他們會爲您提供了一個所有的值,那麼它是什麼樣子,在B,那麼它是什麼樣子在C等等。所以你可以肯定的是,它不僅最終是正確的,而且它的每一步都是正確的。試着讓他們提供經常使用的例子,還有其中一些不尋常的例子,這樣你就可以確定你的代碼覆蓋了邊緣情況。

+0

謝謝,很明顯,你制定自己比我好得多。 – Makach 2009-06-02 06:10:13

2

我建議devs花費幾個小時習慣Matlab,特別是Matlab調試器。如果他們的背景是CS,那麼他們已經在理論上已經熟悉向量和矩陣,如果不是實際的話。除矩陣是默認的數據結構外,Matlab非常類似C語言,並且很容易解釋爲翻譯成另一種語言。

2

我最近和一位物理教授一起工作,並且對此有一點經驗(雖然我承認我不是專家)。我不得不將許多Matlab代碼翻譯成另一種語言。這很困難,因爲很多(大部分)操作都不存在,包括涉及到精度和處理矩陣和向量。需要找到一個好的數學圖書館,或者根據您的需求進行創建。

,我發現最好的辦法是做到以下幾點:

  1. 獲取算法在新的語言正常工作。
  2. 創建一些測試以驗證算法是否正在生成所需的輸出。讓您的數學家驗證您的轉換後的解決方案實際上是否有效,並且您已通過測試覆蓋了所有基礎。
  3. 然後在工作之後,你可以相信你的測試,優化算法,使其成爲良好的編碼風格,具有良好的設計和性能特徵。使用你的迴歸測試來確保你沒有破壞任何東西。

我通常從他們算法的逐字拷貝開始到另一種語言,然後從那裏開始工作,不管我做了很多測試。

首先獲得工作副本非常重要,以免性能確實不是問題,並且您需要轉移到其他方面並稍後再回來以使其更快。

0

這是你的工作。您如何處理這個問題就是將您標識爲系統開發人員。

與你的同事溝通。繪製和解釋,召開會議,商定和制定標準要求,遵循您的計劃並與您的項目經理交談。確保你的相關同事參加會議。有1-1談話等等等等

你不能怪數學家爲開發人員創建錯誤。擔心實施是他們的工作,而不是數學家。

4

我不確定你的開發人員是否正在重寫數學家的東西,或者如果你只是需要接口,所以我不確定我的答案是否有用。

不過:我與機器學習庫一羣博士生和博士後的共同努力,是學生自己。在那個過程中,我將大量的算法從python/numpy翻譯成C++/blas。

這個過程可能是相當乏味 - 尤其是與數字和隨機算法,它是很難找到的bug。

因此,這裏是我做過什麼:獲取一些樣本輸入和計算與Python代碼的結果。爲C++生成單元測試,然後開始用C++編寫它們。

檢查與輸出混凝土樣品輸入是在該設定必不可少

+0

+ 1用於混凝土樣本輸入。這就像一份合同,並提供一些測試 – 2009-06-01 20:50:16

相關問題