天天看點

算法工程師_淺談算法工程師的職業定位與發展

算法工程師_淺談算法工程師的職業定位與發展

随着大資料和以深度學習為代表的人工智能技術的飛速發展,算法工程師這個職業逐漸成為國内網際網路行業的标配。 2016年3月,谷歌旗下DeepMind公司的圍棋程式“AlphaGo”戰勝職業九段棋手李世石。 這場著名的科技秀把人工智能的熱潮從學術界席卷到工業界、新聞媒體和廣大群衆。 外行人眼中的算法工程師是高收入和高科技的職業;而新入行的人往往覺得算法工程師門檻低導緻内卷化(人才飽和導緻過度競争)。随着算法相關的工具越來越成熟,很多算法工程師自嘲為調包俠、調參俠,于是也開始有人唱衰這個職業。 本人作為有一些算法研究和實踐經驗的過來人,想分享一些自己在企業做算法工作的心得,順便為想入行做算法以及剛從事算法工作的朋友提供一些參考。本文的觀點基于個人的工作經驗和了解,如有不對的地方歡迎指正。 本文接下來的内容分為六個部分: 1. 什麼是算法 2. 算法的應用場景 3. 算法技術介紹 4. 算法工程師的職業定位 5. 算法工程師的職業發展 6. 總結 1. 什麼是算法 提到算法,有人可能會聯想到人工智能。個人覺得人工智能是個非常大的概念(很多算法技術似乎都可以歸類到人工智能),是以為了使叙述更清晰和聚焦,本文會避免用“人工智能”這樣的術語,而是盡量用更精确的詞彙來描述算法相關的技術。 狹義地看,算法是用計算機程式求解 計算問題 的方法。定義一個計算問題有兩個要素:輸入和輸出。 例(素數判定問題):給定一個整數,判斷它是否為素數(素數是隻能被1和自身整除且大于1的整數)。 以素數判定問題為例,它的輸入是一個整數,輸出是一個布爾值:“是”或“否”。求解素數判定問題的算法是一個滿足上述輸入和輸出條件的計算機程式。 在實際應用中,首先要明确算法需要解決的具體問題,以及對應的輸入和輸出,然後才是設計與實作算法。我們可以把一個算法了解成一個滿足輸入與輸出要求的硬體裝置或軟體子產品。從這個角度來看,算法工程師與軟體、硬體工程師的工作是相似的:實作滿足輸入與輸出要求的算法(軟體、硬體)子產品。 算法工程師的工作目标是實作“又快又好”的算法。具體來說,需要關注兩個要素: 解的品質 算法輸出的結果稱為“解”。它的解是否“正确”或者說有多好? 解的效率 算法的計算時間有多長? 更多關于算法的介紹可以參考經典教材《Introduction to Algorithms》(中文:算法導論),作者:T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein。

算法工程師_淺談算法工程師的職業定位與發展

前面介紹了算法的基本概念,接下來我們看看算法在商業中的應用價值。 2. 算法的應用場景 算法産生商業價值有兩個思路: 産品研發 算法本身是商業産品的一個核心子產品。例如,“詞典筆”可以直接“掃一掃”書本上的文字就能實作單詞或句子的查詢和翻譯功能。

算法工程師_淺談算法工程師的職業定位與發展

與傳統的詞典相比,它不僅提供了更友善的查詢方式,而且體積小巧、友善攜帶。為了實作這樣的産品功能,背後的一個核心算法是文本圖像識别(稱為OCR技術)。它解決的算法問題是這樣的:輸入一張文本照片,輸出照片中的文本内容。我們不難發現,決定這個産品體驗好壞的關鍵因素之一就是文本識别的準确率。 降低業務的複雜性 當企業的規模增大,業務必然會變得越來越複雜。這個時候可能會導緻兩種問題:

  1. 組織運轉效率降低,典型的表現就是人力成本高、協作困難、決策流程冗長;
  2. 各業務節點之前存在依賴關系,導緻需要決策的“變量”太多以及決策“空間”太大。

由于任何一種決策結果都會帶來顯著的成本,是以尋求低成本高收益的決策變得非常困難。在這樣的背景下,隻有把複雜的業務抽象成一個個高内聚、低耦合的子產品,然後用算法代替人工決策,才能達到降低成本、提高效率的目的。 接下來我們從三個角度介紹一些算法的商業應用: 自動化 解決重複勞動。  車牌識别   汽車進入機關、小區、上高速、停車等日常場景,管理人員一般都需要記錄車牌号以及出入場地時間。有了車牌識别技術,在這些場景下軟體系統可以代替人工,精準地記錄車輛号牌和出入場時間。

算法工程師_淺談算法工程師的職業定位與發展

人臉識别  人臉識别技術為金融和安防領域提供了廉價、準确且高效的身份核驗能力。以安檢為例,以往身份核驗流程是首先由被檢人提供證件,之後檢查官做人證對比,最後在背景查詢被檢人的犯罪記錄。整個過程既費人又費時。有了人臉識别技術,被檢人隻要面對攝像頭,系統就可以在1秒内完成身份核驗。

算法工程師_淺談算法工程師的職業定位與發展

紙箱推薦 在網絡購物中,商品發貨時一般需要被裝入紙箱。而紙箱的大小對使用者體驗和成本有着直接的影響。如果選擇更大的紙箱,對勞工來說裝箱比較容易,但是成本高而且容易造成商品損壞;選擇稍小的紙箱,對勞工來說裝箱耗時更長,會降低工作效率。 基于選擇紙箱這個頻繁操作的場景,我們設計了一套裝箱算法,為打包勞工推薦最合适的紙箱,不僅節省了裝箱成本而且提升了使用者體驗。

算法工程師_淺談算法工程師的職業定位與發展

個性化 解決使用者需求。 内容推薦  基于人的浏覽行為與“内容”進行比對,其中内容包括文章、商品、廣告等,素材形式有文本、圖檔、語音和視訊。好的推薦算法可以讓使用者在APP中看到更多自己感興趣的内容,就會沉迷其中難以自拔。 換句話會說,使用者在APP上停留的時間越長,APP就可以把更多的廣告呈現在使用者面前,于是賺取更多的廣告費。

算法工程師_淺談算法工程師的職業定位與發展

地圖導航 生活中出差、旅行、接人、上班等場景大機率需要用到地圖導航。輸入出發地、目的地、交通方式等資訊,背後的路徑規劃算法會根據地理資訊自動幫我們規劃出一條路徑,甚至能避開擁堵和限行。

算法工程師_淺談算法工程師的職業定位與發展

由于出行是人們的剛需,是以地圖導航是人們的必需品。它的商業價值不僅展現在廣告的觸達能力,更重要的是可以直接擷取珍貴的“線下”資料(出行資料),進而為其它的商業決策提供有價值的輸入,例如商業選址、餐館和景點的推薦等。 客服機器人 在電商業務中,客服需要回答使用者的售前和售後提問,例如商品、活動、物流、保修等各種咨詢。尤其是在大促期間,常常會出現使用者咨詢量過大導緻等待時間長的問題。 我們通過知識圖譜技術建構商品和物流相關的知識庫,然後把使用者經常咨詢的問題進行分類,基于自然語言處理的技術對使用者的提問進行解析和回答,進而在一定程度上提升使用者體驗并降低客服成本。 

算法工程師_淺談算法工程師的職業定位與發展

系統化 解決複雜問題。 客服排班  給客服安排上班的班次。當客服人數多達百人時,這個問題往往變得非常棘手。原因是現實中考慮的限制條件非常多,例如:

  • 每個班次的客服人數不能低于指定的數量;
  • 一個客服每個月必須休息8天,至少保證每月一次2天連休;
  • 客服安排晚班之後,第二天不能上早班(因為需要休息);
  • 一天同一個人隻能安排一個班次;
  • 每個人的晚班天數差異盡可能小;
算法工程師_淺談算法工程師的職業定位與發展

當客服規模達到一定數量時,這個問題的複雜程度顯然出過了人的經驗能力。我們是以研發了一套排班算法來解決上述問題。 庫存排程 使用者在網上下單之後,商品一般會從使用者所在區域的倉庫發貨,稱為本地發貨。由于不同客戶購買的商品和數量可能不同,是以單個倉庫的商品可能會發生供需不均的情況。 我們需要對全國各倉庫之間的商品進行調撥,目标是提高倉庫的本地發貨率。這樣一來不僅能節約配送成本,而且能提高配送時效。

算法工程師_淺談算法工程師的職業定位與發展

庫存排程要解決如下問題:

  • 哪些商品需要排程?
  • 從哪調到哪?
  • 調撥量如何計算?
  • 安排幾輛貨車?

實際中需要考慮的限制因素也非常多:

  • 箱規:按整箱調撥;
  • 調撥限制:有些商品在隻能調撥到特定倉庫;
  • 倉庫産能:倉庫每日可調撥的件數有限;
  • 貨車容量:貨車的長寬高有尺寸限制;
  • 大促和平銷的目标:平銷控成本,大促控本地缺貨;

我們自研了一套調撥系統,可支援日均10萬商品的調撥計劃自動生成。試想一下,如果這背後沒有算法的支援,我們的人力成本、溝通協作成本以及軟體成本将會随着業務的發展呈指數增長。 使用者觸達 随着網際網路技術的發展,商家觸達使用者變得越來越容易。常見的線上觸達方式有APP内的消息推送、短信和線上廣告。在這樣的背景下,商家觸達使用者需要從全局的角度來考慮,否則不僅浪費成本而且可能帶來極差的使用者體驗。 例如:一個使用者可能在同一天内被短信、消息推送和廣告彈窗的騷擾,進而引起使用者對商家的反感。是以,我們觸達使用者時需要對四個要素做決策:觸達人群、觸達時機、觸達方式和觸達内容。

算法工程師_淺談算法工程師的職業定位與發展

由于不同的觸達方式對應不同的成本與收益,我們自研的這套全管道觸達決策系統不但可以從全局優化“投入産出比”,還能為被觸達使用者提供個性化的文案和紅包等權益。這背後的算法系統除了要考慮商業價值和使用者體驗,還要考慮如何在現有業務中以低成本、低風險的方式進行落地。 通過前文介紹的案例,我們可以看到算法既能作為商業産品的核心子產品輸出價值,也能簡化業務、降本提效,進而讓業務更快更好地發展。值得注意的是,算法是一個寬廣的技術領域,涉及的技術方向較多。下面我們列舉一些常見的算法技術。 3. 算法技術介紹 本節介紹的算法技術(或方向)僅限抛磚引玉,不宣稱公認的分類,也談不上深刻的了解。技術方向之間或多或少有重疊,也無法涵蓋所有算法方向。之是以列出這些方向,要麼出于本人在工作中發現了它的應用價值,要麼源自于本人的興趣。 算法理論 這裡提到的算法理論實際上是指算法相關的基礎知識,主要分為兩塊:1. 資料結構;2. 算法設計與分析。資料結構是算法的基石,掌握必要的資料結構才有可能去實作一個算法。前文提到算法工程師還關心解的品質和效率,而算法設計與分析的理論可以有效地指導我們如何做這件事。 在實際工作中,或許90%以上的項目都可以使用現有的算法工具求解,而不需要我們親自設計算法。但是一旦遇到真正棘手的問題,它需要我們有能力應對,這也是算法工程師的價值所在。 我們曾經做包材推薦項目時需要求解一個三維裝箱問題。根據算法理論,三維裝箱問題是一個 NP-難 問題。這意味着(在NP不等于P的假設下),它不存在“又快又好”的算法(即,多項式時間的精确算法)。于是我們設計算法方案的時候分兩部分考慮:

  1. 當問題規模較小時采用精确算法;
  2. 當問題規模較大時采用啟發式算法。

在求解小規模三維裝箱問題時,我們對計算效率有較高要求。當時開源的求解器不能滿足我們的需求,是以我們決定自研一套算法。這個時候就要求我們對算法設計的方法有一定了解。在項目中,我們用到了 規約(Reduction) 的技巧,把一個三維裝箱問題轉化成 圖(Graph) 上的搜尋問題,然後利用圖相關的資料結構簡化三維裝箱操作。

算法工程師_淺談算法工程師的職業定位與發展

機率統計 資料往往是企業的寶貴資産,因為它不僅可以為商業決策提供依據,還是業務的護城河。資料之是以會有價值,還依賴于正确的資料加工和使用方法。而機率統計提供了描述資料規律的方法,利用資料的規律,使得我們可以預判未來的趨勢、提高決策效率、降低決策成本。

算法工程師_淺談算法工程師的職業定位與發展

雖然這是個大資料時代,但不意味着我們想要的資料應有盡有。在實際項目中,我們常常面臨樣本量不足的問題。以銷量預測為例,假設我們要預測每個商品在 “雙十一”期間的銷量。這個時候我們發現一共才搞過四次雙十一活動。換句話說,每個商品關于曆史雙十一的銷量最多隻有四個樣本點。如果簡單地拟合這個規律,在實際中容易出現過拟合的問題,即導緻預測值與真實值偏差很大。 在這種情況下,我們可以考慮結合主觀經驗與客觀事實。例如,假設雙十一的銷量與平銷的差異服從某個規律,然後借助曆史上幾次雙十一的銷售資料來修正這個規律。這套方法在統計上稱為貝葉斯估計(Bayesian Estimation):主觀經驗得到的規律稱為 先驗分布,利用客觀事實修正後得到的規律稱為 後驗分布。貝葉斯估計提供了一套主觀經驗與客觀事實結合的方法,能有效地彌補實際情況下樣本量不足的問題。 機器學習 網絡上每天生産着海量的文本、圖檔、語音和視訊資訊,它們也是企業珍貴的資料資産,有着巨大的商業價值。那麼如何用算法對這些資訊進行分類、了解以及分發? 深度學習普及之前,業界主流仍然是采用基于統計的方法處理這些資料,即,利用機率分布函數來表示資料的規律。注意到數字媒體這一類資料的次元非常高,例如,一張手機照片的像素點就高達千萬,好處是它能表達的内容非常豐富。但是從算法的角度來看,這一類高維資料非常難以處理,因為已知的機率分布函數難以表達這種規律,即使這些規律在人看來很簡單。以文本識别為例,人可以快速識别出照片中的文字,但是我們很難找到一個函數把圖檔上的像素值和它表達的文字關聯起來。 而深度學習提供了一種“逼近”這種複雜函數的方法。它通過定義“元函數”(稱為激活函數)和仿射變換,然後利用海量的資料來拟合出這種複雜的函數關系(這個步驟稱為“訓練”),進而可以表達“樣本”與“标簽”之間的聯系。 例如,通過輸入大量包含水果的照片“訓練”一個深度學習模型,進而讓計算機有能力識别照片中的水果。這背後并不是資料讓計算機有了真正的智能,而是它把照片的像素值作為算法模型的輸入,用類似于最小二乘回歸的方法拟合出了一個複雜的函數,把像素值與“水果”之間的規律表達出來。

算法工程師_淺談算法工程師的職業定位與發展

深度學習這種自動化的拟合能力使它可以在海量資料中學習資料與标簽之間的聯系,因而非常适合用來解決分類問題,例如人臉識别、圖像分割、語音識别、機器翻譯等。随着機器學習工具和相關計算硬體(GPU、TPU、FPGA等)的發展成熟,機器學習應用的門檻進一步降低,模型的訓練和部署已經變得非常便捷。我們有理由相信,未來有隻要資料的地方就有機器學習算法創造價值的機會。 模組化與優化 數學模組化是一種把複雜問題抽象化的技術,它用數學語言描述現實世界的問題,使得我們可以用系統的方法對它求解和分析。而優化方法可以看作是求解數學模型的工具,例如前文提到的深度學習技術,本質上是用梯度下降的方法解一個優化問題。 在企業經營中,利潤和成本結構往往是非常複雜的。以網易嚴選的電商業務為例,我們的業務鍊路包含商品研發、采購、倉儲、質檢、配送、營銷、管道和售後。業務節點之間的成本(或利潤)可能同時存在依賴和沖突的關系,是以各節點做好自己的業務不一定意味着整體業務會好。 如何站在全局的角度來思考并解決業務中的複雜問題?需要分三步:

  1. 充分了解業務;
  2. 把業務問題抽象化;
  3. 用數學語言表達然後求解。

建構數學模型可以使用一套标準方法,即梳理數學模型的四要素:參數、變量、目标和限制,其中參數是指問題的輸入。 以數獨遊戲(Sudoku)為例,把數字1-9填入下圖的空格子中。

算法工程師_淺談算法工程師的職業定位與發展

填入的數字必須滿足三個條件:

  1. 每個區塊包含數字1-9;

(圖中灰色方框包含的3×3小格子代表一個區塊) 每行包含數字1-9; 每列包含數字1-9。 問題的 輸入參數 是圖中給定的數字;變量 是空白處需要填入的數字;限制 是上述三個條件。這個問題沒有優化目标。這樣一來,我們可以得到求解數獨問題的數學模型:

算法工程師_淺談算法工程師的職業定位與發展

利用通用的求解工具求解這個數學模型,即可得到數獨問題的解。 我們研發的決策産品, 例如庫存平衡系統、自動補貨系統、排班系統和全管道觸達系統,都是以抽象的數學模型為基礎,并持續地疊代模型和算法。這些算法産品在提升業務目标的同時,推動業務沿着低複雜性的方向發展。 個性化技術 在電商業務中,一個殺手級的功能是可以為使用者帶來個性化的購物體驗(俗稱“千人千面”),因而使得網絡購物比線下購物更高效。個性化技術的典型代表是内容推薦技術,在電商業務中,推薦的内容以商品為主。

算法工程師_淺談算法工程師的職業定位與發展

為了實作更精準的推薦,技術層面要不僅要參考商品和使用者的特征,甚至還需要考慮營銷活動、庫存、使用者體驗等因素。這背後可能還需要圖像處理、音視訊處理和自然語言處理等技術的協同。 以生成商品頁面為例,一般它包含了賣點文案、圖檔和視訊介紹。為了給使用者呈現個性化的文案、圖檔和視訊風格,進而刺激使用者下單,我們用自然語言處理技術抽取商品資訊并生成賣點文案,用圖像生成技術制作不同風格的商品圖檔。 通過算法挖掘商品評論,我們可以自動化地提取商品賣點并呈現給使用者,促進使用者下單;對差評原因分類,進而改進商品和提升購物體驗;通過建立商品知識圖譜,用對話生成的技術回答使用者的售前和售後提問,進而提升使用者體驗并降低客服成本。 回顧前文提到的深度學習技術,它的成功離不開它在圖像、音視訊和自然語言領域的突破。而個性化技術本質上也是在海量非結構化資料中拟合人與内容的聯系。是以,應用深度學習技術可以有效地實作多種場景下的個性化能力,例如猜你喜歡、新品推薦、個性化文案等。 更多的技術 前文提到的算法技術隻是工業應用中的冰山一角。還有非常多不同的算法在工業界中大放異彩,例如計算機圖形學用于動畫、遊戲和工業設計中的三維模組化,有限元分析用于建築和橋梁設計,同步定位與地圖建構技術(SLAM)用于機器人和自動駕駛等等。 世界在變化,使用者需求在變化,因而企業面對的問題也在不斷變化。技術人員應該意識到沒有哪門技術能解決所有問題,而技術交叉越來越普遍,是以我們需要保持技術嗅覺和好奇心,堅持學習,然後用适合的技術解決問題。 4. 職業定位 前文介紹了一些算法技術,但實際上并沒有在技術細節層面展開,而是始終圍繞技術在商業中的應用價值,目的是想強調兩點:一是在企業中技術必須創造商業價值,這樣才能讓企業在競争中領先,同時促進行業的進步;二是算法工程師的職責以“應用”算法為主,不能脫離業務。 我把算法工程師分為三種類型(我承認可能過于狹隘,畢竟某些企業還存在學術型的算法人才): 産品研發型 為産品研發提供技術支援。這種情況下,算法一般是商業産品的一個子產品。例如:詞典筆的文本識别功能、汽車的自動駕駛系統、電商APP的搜尋功能等。 産品研發型的算法工程師主要關心産品的技術實作,用算法技術為使用者提供極緻的體驗。這種情況下,隻要産品賣得好,算法的價值就能充分展現。是以,産品研發型的算法工程師一般出現在商業模式比較清晰的業務(例如賣産品、賣廣告)。 業務優化型 當業務發展到一定階段可能會面臨兩種局面:一是規模太大,例如使用者數、員工數、裝置數、産品數等非常龐大;二是業務複雜,業務節點之間依賴與競争并存,導緻成本和利潤構成複雜。這樣會造成業務的運轉效率降低,企業成本增加。 在這樣的背景下,算法工程師需要為企業降本提效。例如:

  1. 實作業務節點的自動化;
  2. 做精細化的決策;
  3. 業務模組化與流程仿真。

以零售中的補貨為例,庫存量的多少直接影響到企業的成本和利潤。一般來說,從下采購單到貨品入庫需要制造和運輸時間(稱為提前期,短則數周長則數月),是以商家需要預估未來一段時間的銷售量,依此計算采購量。由于預測不可能精準,是以會導緻計算的采購量與實際需求有偏差。采購多了不僅占用資金而且會增大庫存積壓的風險;采購少了就會造成缺貨,進而損失銷售利潤。是以,采購量的計算模型直接影響到商家的成本和利潤。 類似這樣的決策問題在零售業中比比皆是,算法工程師需要建立符合業務的數學模型,用科學的方法為企業做出最優決策。 業務優化型算法工程師的價值在于創造“增量”價值,即帶來成本的節約、效率的提升或利潤的增加。在日常工作中,我們需要評估算法項目帶來的增量價值,避免把過多的精力放在價值不高的事情上。 需求洞察型 技術研發最難的地方有時候不是解決問題,而是發現問題。比如複盤業務資料的時候,發現使用者規模或經營利潤不達标,這個屬于業務症狀。那麼造成這些症狀背後的主要原因是什麼?這是我們需要回答的問題。算法工程師要有能力從資料的角度發現問題、抽象問題以及提供解決方案。 有人可能會質疑,難道這不是資料分析師的職責嗎?沒錯,資料分析師當然可以做這件事。但是對其能力的要求可能不僅限統計分析,還要有一定的模組化和計算能力。事實上,發現技術問題的本質是定義技術問題,而定義技術問題需要對技術有較深的了解。 下面我舉一個例子來說明這個觀點。我們曾經做一個包材項目,目标是降低消耗紙箱的成本。我們的技術思路是研發一套三維裝箱算法,給倉庫打包的勞工推薦最優箱型,進而節省裝箱成本。事實證明這套算法确實産生了顯著的效果。那麼後續如何進一步降低紙箱成本呢? 經過思考我們發現,這套三維裝箱算法還可以用來優化紙箱的尺寸,進而達到進一步降低紙箱成本的目的。之後我們用算法設計的新箱型,用曆史訂單進行了一次模拟,評估發現确實可以顯著降低紙箱成本,于是推動了新箱型在業務中的落地。回顧這個案例,我們從紙箱推薦問題出發,進而研發紙箱設計算法。這個研發需求的變化來源于我們對業務的了解和技術的認知。 算法工程師走到這個階段,除了對技術能力的要求,還需要承擔部分資料分析、産品設計甚至是業務操作的職能。從另外一個角度來看,資料分析師、産品經理、業務人員也應該掌握一些算法能力,以便從技術角度思考問題或者讓技術人員更快速地定位問題。 小結 随着技術工具越來越成熟,技術應用的門檻越來越低,個人覺得未來對複合型人才的需求會越來越旺盛。作為算法工程師的你,不妨問自己幾個問題:

  1. 我們的商業産品是什麼?它是否以算法為核心的産品?
  2. 我參與的算法項目,産生的商業價值是多少?
  3. 我們的商業模式是什麼?業務的機會點在哪?

企業在不同的發展階段和不同的項目中對算法人才的要求是不一樣的,是以要求我們能夠在不同角色之間切換。技術是我們的出發點,但解決問題才是我們的終點。隻有站在商業的角度思考技術,才能洞察需求和創造商業價值,進而提升自身的競争力。 5. 職業發展 技術在進步,需求在變化。隻有洞察變化,才有可能引領技術創新,進而提升自己的職場競争力。下面我站在職業發展的角度,探讨一下算法工程師需要具備的能力(我承認又狹隘了,畢竟作者本人菜雞一隻)。 技術能力 技術能力是技術人員的立身之本。站在算法的角度,這裡的技術能力主要是算法應用能力,包括閱讀論文、算法實作、工程化以及相關文檔的撰寫。 技術人員常見的一個認知誤區是技術大于一切,認為隻要技術做好了,就應該得到認可或獎勵。事實上,技術在大多數情況下隻是商業中的一環,技術做得好不能確定商業上的成功。 以自營電商為例,技術人員做一款功能強大的購物APP不難,但同時必須有商品研發、供應鍊和物流配送才能完成一個極小的商業閉環。此外,要想商品賣得好得有市場和營運團隊一起發力。在這樣的背景下,購物APP隻是諸多商業環節中的一個節點,是以僅僅依賴軟體研發技術顯然不足以實作商業上的成功。好的技術團隊必須始終圍繞各商業環節,有能力定位問題,并研發工具有效地解決問題。 業務能力 作為算法工程師,在立項和需求評審時,需要有能力評估項目為業務帶來的價值以及算法在整個項目中的價值,進而避免把精力浪費在“投入産出比”不高的事情上。如何做到這一步呢?除了有紮實的技術,還需要深入了解業務。 需要了解的業務知識包括(但不限于)商業模式、業務流程、業務限制以及與目前業務相關的技術等等。算法工程師了解業務的另一個好處是洞察需求,解決問題的同時可以發現更多的技術問題,進而推動業務的進步。 技術人員最難跨越的是從技術能力到業務能力的提升。有兩方面原因:一是技術人員主觀上不太願意處理業務問題(扯皮的事情較多);二是技術人員晉升和跳槽時主要被考察的還是技術,是以業務能力在有些技術人員看來短期的收益不高。 架構能力 架構能力是一種解決複雜問題的能力,它需要考慮業務的現狀和未來,把複雜問題分解成簡單問題,然後給出解決方案。與軟體架構相比,算法架構更偏向業務,不僅要對業務進行模組化和抽象,還要考慮工程實作,以便技術方案在實際業務中落地。是以,良好的技術能力和業務能力是算法架構能力的基礎。 算法相關的技術項目可能涉及到與其它技術工種的配合,例如:産品經理、資料分析、資料開發、前端、後端、測試、運維等。是以,算法工程師設計的技術方案應該考慮到算法子產品與其它技術子產品的解耦與協同。 算法工程師做解決方案時應該從全局出發:一是技術上不僅考慮算法而且還要考慮工程實作和産品化(切忌手裡有錘子,看什麼都是釘子的想法);二是從整體業務的角度考慮項目帶來的收益。例如,假設推薦系統的重構可以帶來推薦子產品的轉化率提升。那麼這件事情一定值得做嗎?我們還應該評估這個提升效果對大盤利潤的影響。如果對大盤利潤的提升有限,或許應該把精力投入在更有價值的項目中。 管理能力 在網際網路行業,多工種協作是常态,但管理能力卻恰恰是技術人員最容易忽略的一項能力。這裡說的管理能力不是站在管理人的角度,而是站在取得業務結果的角度。它主要展現在:溝通協作、項目管理、目标管理和風險管理。 簡單來說,就是把自己負責的事情做好而且講明白,即:

  1. 把要做的事講清楚;
  2. 按要求傳遞工作内容;
  3. 把業務結果講清楚;
  4. 把風險講清楚。

我在工作中發現,不重視管理能力的技術人員常常面臨這樣的尴尬局面:辛辛苦苦寫了很多代碼,最後項目卻沒有上線;或者項目上線了卻說不清收益。然後看着自己的同僚,覺得他代碼能力不如自己,研究能力也不如自己,卻屢次升職加薪。于是内心抱怨着命運的不公:寫代碼的不如寫PPT的! 管理能力的提升不是一朝一夕,希望算法工程師們重視管理能力,在實際項目中不斷磨練自己。說不定升職加薪不過是水到渠成的事。 6. 總結 本文花了較大篇幅介紹算法的概念、應用場景和算法技術,目的是強調算法技術必須創造商業價值。随着科技進步和全球數字化時代的到來,商業決策隻會變得越來越複雜,而算法産生價值的空間一定越來越大。 從前文提到的應用場景,我們看到算法工程師這個職業的工作内容是非常多元化的。誇張地說,算法工作簡直沒有邊界,這也對算法工程師提出了更高的要求。我總結成兩點: 1. 算法工程師有三種類型:産品研發型、業務優化型和需求洞察型。企業在不同階段以及不同項目中,對算法的需求是不同的。我們需要有能力洞察需求,并按需切換自己的角色。 2. 從職業發展的角度來看,算法工程師需要掌握四種能力:技術能力、業務能力、架構能力和管理能力。業務能力和管理能力非常重要,但往往容易被技術人員輕視。 最後聲明一下,文中的觀點基于個人工作經驗,由于個人經曆的狹隘和認知的不足,難免有不正确的地方,歡迎讀者指出。

繼續閱讀