算法工程師應該具有哪些工程能力?

做者 | 木東居士
來源 | Data_Engineering

最近看了 Milter 的《算法工程師究竟須要哪些工程能力》這篇文章,有所感想,所以也寫一篇關於算法工程師的技術能力的問題,和你們分享一下居士關於算法工程師的技術能力的觀點。前端

對於一名優秀的算法工程師,他(她)要具有的不只僅是出色的技術能力,也要有很深的業務理解能力和對外溝通能力,總之,要求能夠很高!算法

可是,從職責能力的劃分上來說,算法工程師首先是一名工程師,所以本文主要從工程能力要求上進行一些探討。編程

開始以前先放一份思惟導圖,這將是這篇文章要分享的核心內容:網絡

工程能力概覽

算法工程師,從名字上咱們就能看出,一名算法工程師首先應該具有算法能力工程能力,咱們能夠認爲這是基礎的技術能力。因爲如今開源技術的普及,Sklearn、Tensorflow 和 Spark ML 基本已經成爲大部分算法工程師標配的工具庫了,所以,熟練的調包能力也是決定了一名算法工程師可否快速實現需求。架構

其次,在真實的生產環境中,算法的落地會遇到各類各樣的業務場景和數據環境,這也要求算法工程師須要具有Pipeline 構建能力,將整個生產環境中的數據流和模型打通。同時,在生產環境中,會出現各類「疑難雜症」等待你去解釋,好比說爲何實驗效果特別差?爲何模型效果不穩定?這就要要求算法工程師須要具有必定的數據分析能力負載均衡

不少時候,你會發現,你用在數據分析和Pipeline構建上的精力可能佔據了你8成以上的工做內容。運維

當你具有了上面的能力時,你已經能夠稱本身是一名算法工程師了。此時,你能夠去對着數據分析小得瑟一下:「你看,我能構建整個模型的Pipeline,你卻只能拿到別人提供的數據後調調包吧。「或者,你也能夠去找開發得瑟:」你看,我懂了不少算法哦,你就只會寫代碼吧。「

得瑟完以後,咱們仍是迴歸正題,算法工程師只具有這樣能力是否已經夠了?答案固然是不夠的。因爲不一樣公司的團隊成熟度不一樣,工具化和流程的成熟度都不一樣,這就會對算法工程師有不一樣的要求,好比說模型發佈能力報表開發能力,固然也會有一些其它能力,雖然可能不是特別重要,可是當這些工做沒人幫你作的時候,算法工程師可能依然要承擔起這些工做內容,好比說灰度測試的能力、負載均衡的能力等等。編程語言

將上面的內容整理後,就是這樣一份思惟導圖了(一張圖多看幾篇更能加深印象,所以我再貼出來一遍)分佈式

工程能力詳解

1、基礎能力

算法能力工具

算法能力就很少說了,算法工程師的基本能力要求,不懂算法對於一名算法工程師來說是不太合理的。這裏居士把統計學的內容也放進來了。

編程能力

編程能力主要分爲兩部分:

  • Python、C++、Java這類編程語言,這三種也是算法工程師須要瞭解的主流編程語言,通常掌握其一就夠,看不一樣公司。
  • Sql就是很通用的能力了,Sql也是一門編程語言,而是是數據處理最經常使用的語言!
    很好用。
    大數據場景下,要了解Hive Sql。

調包能力

你們雖然會調侃調包俠,可是說實話,能調包調的很溜的人,也是很少的,好比說如今讓你本身用tensorflow構建一個複雜網絡,不能google,你能寫出來嗎?能記清楚用法嗎?

  • Sklearn
  • Tensorflow
  • Spark ML

2、核心能力

Pipeline 構建能力

Pipeline構建能力,這裏想表達的更多的是整個數據流的構建能力,數據從日誌->特徵->模型訓練->反饋,這一個鏈條可否完成的能力,這裏面會有不少難題須要克服。好比說:

  1. 實時和離線模型一致性問題?
  2. 離線和實時特徵一致性問題?
  3. 實時特徵構建的問題?
  4. 數據延遲的問題?

不少時候,模型發佈之類的工做是能夠由其餘同窗支持完成,可是數據流這種問題更多的是須要算法工程師來解決的。

數據分析能力

這裏的數據分析能力不是指商業分析或者業務分析,更多的是指特徵分析、算法效果分析和各類異常問題定位分析的能力。

不少時候,兩個算法工程師能力水平的強弱從數據分析能力上也能窺得一二。

3、輔助技術能力

輔助的技術能力是指,你會不會的影響不會特別大,可是也都是有用的能力,特別是不一樣公司的發展狀況不一樣,極可能會出現一個算法工程師既要作數據接入、又要作數據清洗、還要作算法平臺
也要搞前端、還要負責模型上線、系統運維。

這裏就再也不細講了。

思考一

聊一下對技術能力、工程能力和數據分析的思考。

居士我的的理解,技術能力更多的是偏向於一個一個的技術點,而工程能力更多就是在一個團隊中將項目作好的能力。不少算法出身的工程能力不行,那麼他作的單純的一個模型是沒法應用到實際生產中的,而工程就是指把理論落地實際生產的過程。那麼工程包含了什麼?它包括了系統架構設計和模塊設計、數據流搭建和平臺搭建、調包或算法開發、分佈式、上線以及各類落地的代碼開發。報表和監控,其實本質也是作數據流,邊緣性的可能要作些後臺和前端的開發。

而後數據分析能力是什麼?數據分析(不是純粹的數據分析)除了分析方法論和套路外,是一個很綜合性、相對偏軟一點的能力,好比說你經過分析發現了咱們的系統有哪些能夠優化的點,經過分析發現了問題的緣由是什麼,這些都是分析能力。

思考二

針對前面的內容,和 Cathy 討論後,對整個思路作了新的梳理,你們直接看圖就好,居士也認爲這樣描述可能更爲合理。

思考三

這裏再補充一個模型復現的能力,好比你看了一篇論文,發現這個模型可能很適合本身的業務場景,那麼你是否能力將論文裏面的模型快速用公司現有的平臺和工具來複現?

居士認爲,這一個是一個很是重要的能力,可是沒有想好具體該怎樣劃分。

相關文章
相關標籤/搜索