搞演算法研究的需不需要有做開發的編程能力?


謝邀

做演算法也好,做研究也罷,編程都是必不可少的,當然需要一定的編程基礎。但是說具體的要求有多高需要細細分析。

我不太清楚題主所說的演算法研究具體指的是什麼領域,不好妄言。不過就我相對熟悉的互聯網領域,倒是可以談一談。希望可以給題主一點參考。

互聯網圈子中的演算法崗位中碩士居多,本科較少,少數基礎演算法和人工智慧崗位博士居多。單單從學歷上來看,演算法崗位的平均學歷要比開發高一些,但是方向更偏數學和統計一些,而少一些工程性,所以總體來說,演算法和開發崗位應屆生的編程能力至少是差不多的。

從我的觀察和總結來看,影響一個演算法工程師編程能力最主要的一點就是他從事的方向,越是接近實現層,對於編程能力的要求也就越高。比如有些大公司內有自己的演算法平台和組件,阿里很多這些組件都是基於C++實現的。結合C++缺乏各種組件庫以及指針的用法之靈活的特點,對於編程能力的要求可想而知。

而越是接近業務,接觸到底層開發的機會也相應的越少。很多演算法工程師甚至都沒有寫過Java等較常用的開發語言,對於操作系統以及網路等各方面的知識相較開發工程師來說也稍顯單薄。甚至很多作為的數據分析師做著和BI一樣的活,演算法庫都未必用過許多。

但不管怎麼來說,只要是技術崗位,編程能力始終都是一個非常重要的指標。即便現在演算法的各類組件和功能庫都非常完善,但依舊還有大量的數據處理以及定製功能需要自行開發。而更多的時候,動手寫一段代碼作為腳本或者是工具更是再正常不過的事情。

從工作性質來說,演算法工程師能力更多的體現在對於數據的特點的思考以及對於演算法模型的理解和運用,照這麼來排序的話,編程能力只能排第三。只是編程角度而言的話,門檻的確是比開發要低一些的,所以也才會有很多數學、統計專業的從業人員。

但是從目前的現狀來說,各大公司的招聘門檻這些年都在水漲船高。具體的反應就是身邊人的學歷,本科的越來越少,碩士越來越多。編程能力也越來越多地出現在了演算法崗位的招聘jd上。我自己面試的時候就遇到過很多讓我白板寫演算法的問題,沒有一定的編程能力當場寫代碼,恐怕很多人過不去吧?

如果用一句話來總結的話,編程能力不是演算法的主技能,但一個牛x的演算法一定可以當一個牛x的開發。


我覺得有做開發的編程能力。

因為隨著演算法(深度學習,機器學習等等各種)發展,落地是必須的。要落地的話,就需要根據具體平台,有限的資源進行優化。當然這塊可以理解為MLE要做的事情,銜接research和產品。在公司裡面做researcher,我發現這些人的碼力也是相當驚人,有了一個idea,代碼很快就碼完了。我覺得編程能力高對於快速驗證幫助特別大,比如別人都已經驗證了十來個idea了,你還在磨第一個想法,這個效率就很低下了。

在北美這裡,我面MLE(machine learning engineer)白板寫題我覺得要求一點都不比我面Google,Apple的SDE要求低。除此之外,還有準備機器學習,計算機視覺,深度學習,強化學習各種理論,同時有些問題也是很實際的工程應用,反正各種姿勢的題目都有。從具體的數學題,MLE,MAP,梯度計算這些,到演算法細節,再到系統設計,再到他們工作中遇到的實際問題。

在編程這塊的話,我覺得最好是Leetcode刷到400+,基本都是自己想的,然後出現做過的,可以秒殺,沒做過的可以很快有思路,我覺得就可以了。

所以總結一下,我覺得搞演算法的,碼代碼不應該比SDE差多少,畢竟MLE也是專門方向的SDE。如果是一天到晚做research,大公司的researcher,也應該要有很強的工程能力,不是一天到晚看paper的,要做出東西來,還是要碼代碼,復現論文。當然,據我觀察,去做researcher的phd,碼代碼能力應該是超強的吧。這些人是寫出了MXNet,Caffe的,仰望~

個人愚見,有點兒混亂,一個學生淺顯的看法~


謝邀~

做演算法是需要一些編程能力的,但是這裡的編程能力並不是做開發的能力。因為做演算法研究的時候是不需要獨立開發完整的工程的。

儘管如此,編程能力也是很重要的。這個能力主要不是指學會很多複雜高深的語法,而是更側重於寫出邏輯正確、結構清晰、布局簡潔的代碼的能力。而這種合理構造代碼的能力正是做演算法需要的。

很多演算法是以數學上推導出的一些結論為核心的,是一種解決問題的思想方法。因此,如何用代碼實現數學思想就是我們所關注的問題。

當然,對於初學者來說,一開始就寫出簡潔美觀的代碼不是容易的事。比如寫「遞歸」就是不少新手頭疼的事情。建議:一邊學演算法一邊練習寫代碼的能力。初學的時候一定要多上機敲代碼!


我覺得做演算法的應該有基本的編程實現能力,而不是僅僅跑腳本、調參、改模型,如果只會這些,那基本上也就是拿開源的東西跑一下了,永遠做不到真正前沿的東西。要想深入去做,我個人認為基本的編程能力是必須的。 很難想像一個不知道自己在做什麼的人能把事情做好。


以演算法研究的能力和精力,去做編程開發,同等的能力同層次比較,要上手,熟練,精通,快得多。
高中數學就有演算法這個選修教材,然而高中生大多沒有很強的編程能力,綜上所述,做演算法和編程能力沒有很強的因果關係。
推薦閱讀:
相关文章