標籤:

如何找一份haskell的工作?

最近要畢業了,找工作很頭疼,本科比較鑽理論一點,學的是pl方向的,data structures和algorithms半生不熟吧,平時寫慣了staticly typed的pure functional language,考慮數據結構一類的也都是persistent data structures,刷面試題一般都用haskell,不是對imperative languages有什麼偏見,只是真的腦子裡裝的都是fp的東西。目前introduction to algorithms和purely functional data structures兩本書都在刷,看前者主要是看個思路,實現目前寫兩份,一份imperative的用ocaml實現,一份functional的用haskell,想問問找fp工作需要做哪些準備?

對algorithm現在刷下來的感覺是imperative的實現的確會有優勢,有些數據結構在fp里實現有難度,比如union-find。而fp的程序比較容易證明正確性,當然也只是相對容易點,簡單一點的merge sort都要涉及到well founded recursion。。。


國內:

不 remote, 基本只有香港渣打, 最新的招聘貼, 之前的貼, 需要的話可以諮詢 @neo lin, 好像應該不用都要 phd 了吧

remote, 不少 remote 是有時區要求的, 別人睡覺的時候我們在努力工作這種事還是比較奢侈, 具體可以看 @Felis sapiens 推薦的那個列表 erkmos/haskell-companies , Haskell Weekly 有時也會出現幾個機會, 還有可以刷 reddit

國外:

還是可以關註上面提到的幾個地方.

提下幾個估計聽過名字的公司:

渣打就不用說了, 說到爛了

Facebook: 直接給 GHC 貢獻代碼的工作機會 , 還有搞到 ARM 上 GHC 的機會 , 搞 Haxl 的 Sigma 組估計已經不招人了, 可能可以問問 @watashi

Github: Senior Engineering Manager - Semantic Code , 根據我觀察可能這 team 有 3,4 個人吧, 這應該是組員發的推

IOHK: Functional Compiler Engineer, 可以 remote, Philip Wadler 做你的產品經理 (誤, Duncan Coutts 給你 review 代碼

Takt 做 Data Science , 搞供應鏈優化, 印象中有用到 Probability programming

特斯拉 用 Haskell 做各種各樣挺 Practical 的工作

幾個挺有意思的公司:

Tsuru Capital 在日本用 Haksell 搞量化的, 員工寫的工作體會

SQream DB 搞 GPU 資料庫, Haskell 用來實現 SQL Parser

有人提到 Galois 這家公司, 這家公司 Haskell 大牛確實挺多, 但是實際工作用到 Haskell 的機會其實不多, 如果留意它的 github 的話, 不少是 verification, 靜態分析, 密碼學的項目, 所以進去這家公司工作基本上多是 phd

so? Haskell 各種工作方向真是五花八門, 不過共同的特點就是門檻都比較高.

編譯器前到後端跟 PL/DSL 設計的技能點真的要點上, 對 GHC跟Haskell 肯定要十分了解, 不然怎麼寫出地道高效的 Haskell 代碼. 看 Paper 的能力肯定需要, 你周圍的同事肯定會刷各種 Paper, 不少更加會信手拈來. 至於刷題, PFDS 這技能點是基本要求, 但是都已經是 Haskell 的崗位了, 哪會像那些普通的崗位靠演算法題來篩人? 其他基本技能 (什麼 DevOps, 糊界面)肯定要有, 首先你是個程序員, 然後才是一個 Haskell 程序員.

看你的描述, 估計上面這些你還沒想明白, 所以最有可能獲得一份 Haskell 工作的方法就是到國外讀個 Master / Phd, 然後去找實習/工作, 學校列表我都幫你準備好了:

關於函數式編程,讀研或讀博,國外哪所大學強??

www.zhihu.com圖標

美帝的話簽證身份問題可能比較好解決, 不過 @neo lin 說北美是 FP 荒漠 233

歐洲不少 FP 甚至老牌 Haskell 勁旅的, 工簽跟身份不怎麼了解


這,找不到工作讀研啊,大家不都是這麼乾的么,還有搞PL不讀個PhD?

言歸正傳,找個haskell的工作還是挺難的,可以去找那些知乎上有haskell工作的人聊聊,他們就算沒辦法拉你進去,也會比你知道更多的工作的機會,如果你鐵了心要做PL的話,印象中做編譯器、靜態分析的崗位還是有不少的(相對而言),可以深入學這方面的知識。

如果不行,也可以早點準備一些常規崗位,畢竟吃飯打緊。

----- 下面是吐槽時間 -----

有一次我面國內某大廠,全程尷尬啊。。。

他:了解面向對象嗎?

我:一般吧(心裡想的都是什麼object types,dependent object types,subtyping polymorphism,dynamic dispatch,MI problem。。。)

他:面向對象的三大特性是什麼?

我:卧槽,不會。。。

他:可以給我講講C++中的多態嗎?

我:C++支持不少類型的多態,比如,函數重載和模板特化屬於ad-hoc polymorphism,有虛函數的繼承是subtyping polymorphism,模板也可以實現和parametric polymorphism一樣的功能,但是不保證forall的語義成立,blablabla。。。

他:。。。

我:。。。

他:給我講講引用

我:explicit ref,implicit ref,lifetime,ownership,borrow check。。。

他:。。。

我:。。。

利益相關:搞PL失敗,搬磚中。。。


https://github.com/erkmos/haskell-companies

這個列表更新還算及時,基本都是 /r/haskell 和 haskell-cafe 上的招聘啟事轉過來的,不妨參考一二。

另外不同 Haskell 開發崗位的面試需求還是差別挺大的。有時候不會 Haskell 也不要緊(比如你可以一晚上擼出一個什麼幣什麼幣的 consensus protocol 的原型實現的話,那基本不愁 offer。。

反正看什麼演算法書都沒有看白皮書管用(逃


一般說做什麼方向的工作,不說用什麼工具的工作。那麼多「Java工程師」崗位主要是因為用人單位不專業。


題主要是不非得haskell的話,試試用ocaml的jane street…

以及業界我還知道一家用haskell的廠叫galois,題主不妨去研究一下?


我在想,你是不是對fp有什麼誤解?


找個寫 js 的,然後把 js 寫成 Haskell 那樣……


&> 想問問找fp工作需要做哪些準備?

第一步、搞清楚世界上有哪些團隊用FP;

第二步、投簡歷等面試;

第三步、用Java刷題。第二步大概率失敗,因為機會太少了。可以爭取找個Java廠,然後找機會寫點Scala,實現人生目標的優雅降級。

另外,題主找工作要不要試試按照工作內容而不是所用工具排優先順序?


推薦閱讀:

如何解釋 Haskell 中的單子?
第一門編程語言就是 Haskell 之流是怎樣一種體驗?
如何使用 haskell 寫出高效代碼刷演算法比賽題目?
怎樣學習 haskell 效率比較高?

TAG:Haskell |