機(jī)器學(xué)習(xí)變得越來越容易,軟件工程仍舊很難
在過去的五年中,機(jī)器學(xué)習(xí)變得更加容易而軟件工程比以往更加復(fù)雜。對(duì)于軟件工程師來說,這是好事,但對(duì)機(jī)器學(xué)習(xí)專家卻不是。這是機(jī)器學(xué)習(xí)向軟件工程,數(shù)據(jù)科學(xué)向數(shù)據(jù)分析的發(fā)展過程。
機(jī)器學(xué)習(xí)工具正變得越來越友好Google希望使每個(gè)人都可以輕松地訓(xùn)練機(jī)器學(xué)習(xí)模型,無論他們的技術(shù)知識(shí)如何。隨著機(jī)器學(xué)習(xí)的發(fā)展,云服務(wù)的市場也在增長,理解算法的意義也在下降。
曾幾何時(shí),我們手敲一行一行算法代碼。而如今,Sklearn讓我們用幾行代碼實(shí)現(xiàn)相同的結(jié)果。原來的TensorFlow很不友好,是Keras讓它變得容易使用。
Google,Microsoft和Amazon現(xiàn)在都提供,可以在云端上選擇訓(xùn)練和調(diào)參的服務(wù),然后馬上就能提供相關(guān)模型的API。
讓任何人都可以訓(xùn)練AI還需要一段時(shí)間。但隨著復(fù)雜性的降低,它成為了經(jīng)驗(yàn)豐富的軟件工程師的另一種工具而已。
機(jī)器學(xué)習(xí)的發(fā)展只和幾種編程語言相關(guān)你會(huì)用COBOL嗎?如果是,那么你就可以不愁沒工作了。世界的金融體系建立在它之上,而如今沒人在學(xué)COBOL編程。
大多數(shù)機(jī)器學(xué)習(xí)項(xiàng)目都是用Python實(shí)現(xiàn)的,而軟件開發(fā)則分布在多種編程語言中。
如果每個(gè)機(jī)器學(xué)習(xí)工程師都有Python的經(jīng)驗(yàn),那么每個(gè)機(jī)器學(xué)習(xí)工程師都是你的競爭對(duì)手。而在軟件工程方面,你只和使用相同語言的人競爭。
我總是驚訝地看到很多高薪的Ruby on Rails框架相關(guān)的工作。雖然它在幾年前就已經(jīng)過時(shí)了,但是許多大型公司(Shopify,Instacart,Kickstarter等)由于續(xù)航與工程量原因依然還在用它。
你應(yīng)該,也有能力去學(xué)習(xí)多種編程語言,這是成為一個(gè)優(yōu)秀軟件工程師的關(guān)鍵。
軟件工程包含更多技能我們期望軟件工程師對(duì)一切都至少知道一點(diǎn)。
后端工程師仍然需要知道瀏覽器的工作方式。前端工程師也了解一些數(shù)據(jù)庫概念。兩者都可以防止SQL注入之類的安全漏洞。
對(duì)軟件有全面的了解,可以讓你更輕松地更改專業(yè)方向。它還使你具備構(gòu)建端到端解決方案的能力。
廣泛的技能包使軟件工程師更適合豐富的環(huán)境。隨著需求的增長,軟件工程師通常會(huì)轉(zhuǎn)向數(shù)據(jù)科學(xué)。相反,數(shù)據(jù)科學(xué)家開發(fā)軟件的可能性較小。
隨著人們開始將機(jī)器學(xué)習(xí)看作是手敲底層代碼的替代方案,我們將看到更多從事機(jī)器學(xué)習(xí)的軟件工程師。
成為有競爭力的全棧開發(fā)人員需要很多年除了使用已知的語言,也包括用了許多之間沒有重合的技能。
從優(yōu)化數(shù)據(jù)庫,構(gòu)建API微服務(wù)和構(gòu)建響應(yīng)前端的字面上看,基本沒有共同點(diǎn)。它們可能用3種不同的編程語言實(shí)現(xiàn)。而且在這些領(lǐng)域,我們幾乎看不到任何自動(dòng)化的過程。
與此形成鮮明對(duì)比的是,全棧機(jī)器學(xué)習(xí)工程師現(xiàn)在正在完成功能越來越強(qiáng)大的AutoML,用了它之后,就可以寫一個(gè)SOP(Standard Operating Procedure,標(biāo)準(zhǔn)作業(yè)程序),然后將訓(xùn)練分類器的工作委托給實(shí)習(xí)生。
而軟件工程技能包中的所有組件都因自動(dòng)化而不復(fù)存在還需要一段時(shí)間。
機(jī)器學(xué)習(xí)是產(chǎn)品的補(bǔ)充而不是產(chǎn)品(通常)少數(shù)公司將人工智能作為其核心產(chǎn)品,而大多數(shù)公司使用人工智能來補(bǔ)充現(xiàn)有產(chǎn)品的缺失。
Medium網(wǎng)站可以使用機(jī)器學(xué)習(xí)來實(shí)現(xiàn)文章推薦功能,但是核心產(chǎn)品是寫作/發(fā)布平臺(tái)。
有趣的是,大多數(shù)公司都將機(jī)器學(xué)習(xí)用于簡單重復(fù)的任務(wù)。這使某個(gè)公司可以輕松地將上述用例作為SaaS產(chǎn)品提供。然后,初創(chuàng)公司就不再需要重新構(gòu)建了。
而與基礎(chǔ)架構(gòu)相關(guān)的問題往往復(fù)雜又有許多自定義任務(wù)。比如AWS上沒有任何現(xiàn)成的解決方案會(huì)很快搭建Medium網(wǎng)站的基礎(chǔ)架構(gòu)。
基礎(chǔ)架構(gòu)變得異常復(fù)雜AWS已擴(kuò)展到200多種不同的云服務(wù)中。
Heroku在云端中運(yùn)行應(yīng)用程序的PaaS方法很棒。但是在任何大規(guī)模項(xiàng)目上都變得過分昂貴。
因此,現(xiàn)在我們有了一個(gè)全新的云端棧來管理(網(wǎng)絡(luò),數(shù)據(jù)庫,服務(wù)器),其中一不小心會(huì)造成巨大的安全漏洞。
有一個(gè)稱為“云工程”的開發(fā)子集,其目的是使軟件在AWS,GCP或Azure上運(yùn)行。
在較小的公司中,基礎(chǔ)架構(gòu)通常是高級(jí)開發(fā)人員的職責(zé)。
這是復(fù)雜的內(nèi)容,同時(shí)也意味著工作機(jī)會(huì)和難以替代的技能包。
前端開發(fā)在不斷發(fā)展當(dāng)中成為一名頂尖的前端開發(fā)工程師是一項(xiàng)技能。
當(dāng)我開始開發(fā)時(shí),使用jQuery構(gòu)建響應(yīng)式前端是完全OK的。然后公司換成了Angular或React。然后Angular變成了Angular2(具有重大改進(jìn))。React從類轉(zhuǎn)移到功能組件,并添加了hooks。
以上所有框架/庫都以根本不同的方式工作。
有幾家公司致力于基于mockups的前端自動(dòng)生成。但我的同事們的共識(shí)是,他們離高質(zhì)量產(chǎn)出還有很長的路要走。
前端開發(fā)方面的技術(shù)能力,加上對(duì)完美像素的感知,目前依然令人驚訝。
結(jié)語軟件開發(fā)是一個(gè)復(fù)雜且包含廣泛問題的領(lǐng)域。這個(gè)復(fù)雜度對(duì)雇傭員工有好處。
但更重要的是,廣泛的技能包賦予了端到端解決實(shí)際問題的能力。
對(duì)于建立一個(gè)讓普通人有能力解決自己技術(shù)棧中問題的開發(fā)社區(qū),軟件工程是一個(gè)很好的起點(diǎn)。
那機(jī)器學(xué)習(xí)有一席之地嗎?當(dāng)然。但解決問題比訓(xùn)練模型更有意義。
學(xué)習(xí)軟件工程,完成開發(fā),解決問題。