認識下算法工程師
關於本文:文章會從什麽是算法工程師這個問題,在網絡上遨遊一番,發現有好的句子就摘抄下來,當然最後,我也會給出一些自己的拙見。
【以下內容參考:https://www.zhihu.com/question/20281296】
工作產品:軟件工程師輸出代碼和文檔,其中代碼是主要產品;算法工程師輸出算法模型和描述,雖然通常也是代碼和文檔,但是目的是為了表達算法。
手段和工具:軟件工程師用的是各種編程語言和軟件架構。算法工程師也使用編程語言,但更多依賴各種專業上的工具軟件,例如MATLAB、各種統計分析軟件等等。
關註點:軟件工程師關註使用現成算法提供應用軟件和解決方案,多數情況下核心算法是算法工程師提供的。算法工程師關註如何解決某一類特定問題,實現某一類功能。舉個例子說明大家是怎麽合作的。公司要開發一款多媒體播放器,就是通常說的MP4。算法工程師研究各種視頻和音頻解碼算法,研究各種多媒體文件格式,研究如何用最少的資源實現最快的解碼速度。在不是很大的公司裏面,算法工程師通常會負責把上面的算法實現成一個軟件庫,只提供幾個很簡單的API給軟件工程師(通常就是應用軟件工程師)。應用軟件工程師使用軟件庫,實現UI等外圍功能,形成最終的產品。
目前互聯網IT企業招的算法工程師大多數是搞數據挖掘和機器學習的。
研發工程師就是做應用層的開發,後端研發的要和和算法工程師提供的算法接口對接,前端研發的要和後端的數據接口對接。這麽講起來有點抽象,我來舉個自己的例子。
我現在在一家互聯網移動廣告創業公司做算法,工程師不多,老大是百度和阿裏出來創業的,主要就分為前端、後端、算法。
算法的職責就是對用戶數據進行建模分析,比如知道你看過了哪些商品,哪些網站,通過一些數據挖掘的手段來把這些信息轉換為特征值,從而實現對用戶群體的分類和聚類,這樣才能有針對性地進行廣告投放,以提高廣告的點擊率和轉化率,這一塊算法的效能基本決定了這家公司的技術硬實力,因為你算法做得爛,就賺不了錢,融不了資,所有人等著吃翔。
後端開發主要是精通一些web架構,怎麽做多線程,怎麽搞分布式,怎麽解決多並發的問題等等等,如果公司規模不大的話後端研發可能還要兼職系統工程師和運維。系統工程師就是做服務器配置,做負載均衡,做數據庫的分布式搭建,做服務器實時的監控報警等等,運維就是維護服務器日常工作,順帶修電腦做幾根網線什麽的......
前端研發主要還是js和node之流,順帶css編寫。不過現在的大學生多多少少有點誤解前端開發的意思,覺得前端開發和美工是一個幹活,導致了我在最近兩次校招中基本面不到前端的人才(或者實在太水了無法直視)。其實前端還是挺有技術含量的,如果你要是知道幾個不同瀏覽器內核是怎麽工作就已經很厲害了,頁面交互也是個技術活,搞太醜了或者逼格不夠高,也是一個不夠格的前端工程師。
工作兩年來除了前端研發別的活我都幹過,如果論待遇而言,相同level下基本是算法 > 後端 > 前端,想進BAT做算法的話,大學期間沒有ACM regional及以上經歷的話估計不行的。
軟件工程師在國內泛指碼農,因為大多數碼農都有個title:軟件工程師
軟件工程師在美國很吃香,因為軟件工程師是一個技術團隊的核心,以工程的思維去做軟件,去思考軟件,包括設計,開發,調試各個方面,懂得設計模式,懂得架構設計,不是我們國內傳統意義的coder
算法工程師其實比較代表一些科研能力較強的工程師,這些人不太出現在民用軟件實現的過程中,也就是不太參與寫代碼實現功能,一般是在一個產品的初期,去解決技術上的難題,提供一些技術方案,也包括方案的初步算法實現,比如在X為,一個研究視頻處理的團隊,這幫人會對核心技術的算法進行實現,弄出一堆庫,一堆包,開發團隊拿到這些核心技術後,就進行實用性產品的開發鳥。
【以下內容參考:https://baike.baidu.com/item/%E7%AE%97%E6%B3%95%E5%B7%A5%E7%A8%8B%E5%B8%88】
研究方向: 視頻算法工程師、圖像處理算法工程師、音頻算法工程師、通信基帶算法工程師、信號算法工程師 目前國內外狀況: 國內從事算法研究的工程師不少,但是高級算法工程師卻很少,是一個非常緊缺的專業工程師。算法工程師根據研究領域來分主要有音頻/視頻算法處理、圖像技術方面的二維信息算法處理和通信物理層、雷達信號處理、生物醫學信號處理等領域的一維信息算法處理。 在計算機音視頻和圖形圖像技術等二維信息算法處理方面比較先進的視頻處理算法:機器視覺成為此類算法研究的核心;另外還有2D轉3D算法(2D-to-3D conversion),去隔行算法(de-interlacing),運動估計運動補償算法(Motion estimation/Motion Compensation),去噪算法(Noise Reduction),縮放算法(scaling),銳化處理算法(Sharpness),超分辨率算法(Super Resolution),手勢識別(gesture recognition),人臉識別(face recognition)。 在通信物理層等一維信息領域目用的算法:無線領域的RRM、RTT,傳送領域的調制解調、信道均衡、信號檢測、網絡優化、信號分解等。 另外數據挖掘、互聯網搜索算法也成為當今的熱門方向。 算法工程師逐漸往人工智能方向發展。
【以下內容參考:http://www.zmonster.me/2015/10/11/algorithm-engineer.html(對算法工程師一職的思考)】
第一點不同是,以上問題的“輸入”都存在很大的不確定因素,而且對這些不確定因素不易檢測和處理。對於普通的軟件、APP以及網站來說,所謂的輸入(主要為用戶操作),是會限定在一個有限集合中的,因而可以按照設計好的邏輯進行處理;但在上述具體項目中,無法保證輸入是符合要求的,對輸入數據的處理(過濾、規整、變換)——即所謂的“預處理”是系統中的必需部分。
數據的預處理,在算法崗涉及的工作中,是非常重要的。核心的算法,在學術界的推動下,都有很多成熟、可靠的選擇,但這些算法,往往都對輸入的數據有嚴苛的要求,數據的預處理如果做得不好,再好的核心算法往往也無能為力。 但由於輸入數據天然的不穩定性和復雜性,數據預處理往往也是煩瑣而復雜的,需要根據實際的業務情況和數據情況設置各種各樣的規則來處理。對於一些成熟的領域如語音、圖像,異常數據的種類是有限的,因此也有通用的處理方法,所謂的“去噪”就是圖像和語音識別中比較重要的預處理方法;但業務情況卻隨產品的定位和功能而千變萬化,這就需要算法工程師對具體產品的業務有深入的理解。
-----
由於無法進行快速叠代,算法工程師的工作強度不算太大(相對而言),而且一般待遇不錯,這算是這個職位的優點了。而相對的,算法工程師的工作會比較枯燥,遠沒有外行人所想象的那麽“酷”,而且大部分時間是在做工程化和調優,其實並沒有太多時間去做探索性的工作。
【】
認識下算法工程師