程序員應(yīng)當(dāng)破除對(duì)技術(shù)不切實(shí)際的幻想——這不是說技術(shù)不重要,而是說要實(shí)事求是的分清,哪些是造狗窩的工作,哪些是建普通樓房的工作,哪些是造摩天大樓的工作。
再談算法
同理,算法工程師應(yīng)當(dāng)破除對(duì)算法不切實(shí)際的幻想,把注意力集中到數(shù)據(jù)的理解、清洗、預(yù)處理、人肉特征、業(yè)務(wù)應(yīng)用(而這些往往和屌絲、苦逼等形容詞聯(lián)系在一起)上來。
未來,機(jī)器學(xué)習(xí)工具將更加標(biāo)準(zhǔn)化、平臺(tái)化、通用化,并且進(jìn)一步降低使用門檻。與算法本質(zhì)無(wú)關(guān)的工程細(xì)節(jié),比如數(shù)據(jù)存儲(chǔ)方式、梯度下降過程、并行化、分布式計(jì)算等,將被制造“輪子”的程序員們屏蔽。算法工程師可能只需用類似Hive的方式,寫幾個(gè)類似SQL的語(yǔ)句就可以完成模型的訓(xùn)練、交叉驗(yàn)證、參數(shù)優(yōu)化等工作。
而機(jī)器唯一不能替代的就是對(duì)數(shù)據(jù)的理解,這是算法工程師存在的價(jià)值。而數(shù)據(jù)是和業(yè)務(wù)強(qiáng)相關(guān)的,算法工程師將更加接近產(chǎn)品經(jīng)理的角色,而不是程序員。深入理解數(shù)據(jù)、業(yè)務(wù)和產(chǎn)品,尋找模型和它們的結(jié)合點(diǎn),將成為算法工程師的核心競(jìng)爭(zhēng)力。
插一句,相對(duì)于本文的觀點(diǎn),Deep Learning在某種程度上是一種的例外。它試圖解決特征工程的問題,也就是在某種程度上代替人提取特征。當(dāng)然,它還比較初級(jí),另外它最多只能解決特征變換問題,仍然處理不了數(shù)據(jù)清洗和預(yù)處理中需要用到領(lǐng)域知識(shí)的情況。
這里劉同學(xué)提出一個(gè)問題,那就是算法工程師對(duì)算法需要理解到何種程度?事實(shí)是,即使從算法的應(yīng)用出發(fā),工程師也需要掌握模型的優(yōu)缺點(diǎn)、適用場(chǎng)景、模型選擇、參數(shù)調(diào)優(yōu)等技術(shù)。這是毫無(wú)疑問的,從這一點(diǎn)上說,算法工程師需要一定的技術(shù)能力,這點(diǎn)又和產(chǎn)品經(jīng)理不同。
但是這就有另外一個(gè)問題:模型選擇和參數(shù)調(diào)優(yōu)技術(shù),是否是通用的?還是和具體的數(shù)據(jù)高度相關(guān)的?比如,是否存在這樣的現(xiàn)象,同樣的調(diào)優(yōu)技術(shù),在(比如說)電商數(shù)據(jù)上表現(xiàn)很好,到了社交數(shù)據(jù)上就不行了?這個(gè)問題我暫時(shí)沒有答案,如果誰(shuí)知道,請(qǐng)告訴我。不過,一個(gè)現(xiàn)象是,目前做機(jī)器學(xué)習(xí)模型相關(guān)的項(xiàng)目,在改進(jìn)的時(shí)候,基本上都采用試錯(cuò)的方式,就是先做出改動(dòng),然后上線觀察效果;如果不好,就換種方法;如果效果有所改進(jìn),也往往沒有人知道為什么。如果存在一種通用的判斷模型優(yōu)劣的技術(shù),我們?yōu)槭裁催€要采取這種近乎窮舉的方式呢?
從“IT精英”到“IT民工”或者“碼農(nóng)”,這種稱呼上的轉(zhuǎn)變并非笑談,而是真實(shí)的反應(yīng)了計(jì)算機(jī)編程領(lǐng)域門檻逐步降低的過程。所以,我們應(yīng)當(dāng)給聽上去高大上的“算法工程師”或者“數(shù)據(jù)科學(xué)家”起一個(gè)類似的外號(hào),比如“數(shù)據(jù)民工”、“機(jī)農(nóng)”或者“蒜農(nóng)”之類,以免不明真相的孩子們被“高大上”的稱號(hào)吸引而誤入歧途。
其它
看的出我是一個(gè)比較純粹的技術(shù)人員,因?yàn)閷?duì)于非技術(shù)的東西,我了解不夠,說不出那是什么,只能用“其它”一詞概括。
這“其它”,基本上是“人”的問題——比如前面提到的“如何推動(dòng)自己的想法”,“軟實(shí)力”之類,大的包括機(jī)遇,小到“發(fā)郵件應(yīng)該抄送給誰(shuí)”這種細(xì)節(jié)。
當(dāng)然,如果你是個(gè)對(duì)技術(shù)本身感興趣的人,這些討論不適用,因?yàn)閷?duì)于這類人,技術(shù)本身就是目的,不是手段。這里的視角,僅僅是社會(huì)普遍意義上的職業(yè)發(fā)展角度。無(wú)論是想在公司內(nèi)部獲得升遷,還是通過跳槽而得到晉升,還是自行創(chuàng)業(yè)而實(shí)現(xiàn)人生目標(biāo),技術(shù)都只是你的一種技能。如果再想想大部分公司里提供的是一份“造狗窩”級(jí)別的職位,這種技能起的作用又有多大呢?
不過多說一句,要求程序員“對(duì)技術(shù)感興趣”,甚至“在業(yè)余時(shí)間以寫代碼為消遣”,是一種相當(dāng)荒謬的事情。試想,招聘銷售人員的時(shí)候,從未有人要求求職者“對(duì)喝酒應(yīng)酬感興趣”;招聘財(cái)務(wù)人員的時(shí)候,也沒有人要求“對(duì)加減數(shù)字感興趣”;招聘外科醫(yī)生的時(shí)候,也絕不會(huì)要求“平時(shí)以解剖人體為消遣”。為什么程序員這種職業(yè)就要搞特殊?
究其原因,大概是大家還沉浸在對(duì)技術(shù)的一種非理性崇拜之中(當(dāng)然崇拜和褻瀆往往并存)——“技術(shù)改變世界”這句話常常被提到。這句話沒錯(cuò),但是要搞清楚,“技術(shù)改變世界”不等于“每一項(xiàng)技術(shù)都能改變世界”,更不等于“每一個(gè)技術(shù)人員都能改變世界”。其實(shí),程序員這一行和其它任何一個(gè)需要專業(yè)技能的行業(yè)沒什么區(qū)別,只是一種謀生的手段而已。