過去的5年里,機器學習變得越來越容易,機器學習工具也正在變得愈加“平民化”。而與此同時,軟件工程卻比以往更復雜了。然而,這對于軟件工程師來說是件好事,但對于機器學習(ML)專家來說則不然。
原因何在?事實上,這是機器學習到軟件工程,數據科學到數據分析發展的進程。
機器學習工具正愈加“平民化”
谷歌希望每個人都能接觸到機器學習模型的訓練,不論他們的技術知識如何。隨著機器學習大眾化,云服務的市場逐漸增長,理解算法的價值則逐漸下降。
很久以前,我們手動編碼算法。后來,Sklearn可以在幾行代碼中完成同樣的操作。原始的TensorFlow很難使用,Keras使其變得容易。如今,谷歌、微軟和亞馬遜都提供服務用以選擇、訓練和調整云中模型,然后立即在API后提供模型。
可能在不久的將來,人人都可以訓練人工智能。但是隨著復雜性的降低,對于經驗豐富的軟件工程師來說,它只是信手拈來的另一個工具而已。
機器學習發展集中于幾門語言上
語言的重要性不必多說。你知道COBOL(面向商業的通用語言)嗎?如果知道,便能獲得一份終身工作。世界金融體系依賴于此。然而如今沒有人再學習COBOL了,大多數機器學習是通過Python來實現,而軟件開發則是通過多種語言實現的。
如果每位機器學習工程師都具備使用Python的經驗,那么你的競爭對手就是每一位機器學習工程師。但從軟件的角度來說,你只會和使用相同技術的部分工程師競爭。
我總是能看到許多高薪的軟件工程師(Ruby onRails)職位,這令我很驚訝,這個職位早在幾年前就過時了,但是由于歷史遺留問題,許多大公司,如Shopify、Instacart、Kickstarter等,仍在使用它。
你確實可以并且應該學習多種語言,這對于能否成為一名優秀的軟件工程師來說至關重要。
軟件工程需要更多技能
我們總是期待軟件工程師對每個方面都至少有一些了解。
快速草圖
后端工程師知道瀏覽器的工作原理,前端工程師也具備一些數據庫的概念。兩者都能防止如SQL注入這樣的安全漏洞。對軟件有一個整體理解能使改換專業變得更容易,還能幫助構建端到端解決方案。
廣泛的技能組合使軟件工程師能更好地適應模棱兩可的環境。隨著需求的增長,軟件工程師經常轉行到數據科學領域。但反過來,數據科學家則不太可能去開發軟件。隨著人們開始將機器學習看作硬編碼條件邏輯的替代品,更多軟件工程師去涉足機器學習領域。
成為有競爭力的全棧開發者需要數年時間
實際上,優化數據庫、構建API微服務以及構建響應式前端這三者之間并沒有什么共同點。他們可能是由3種不同的語言實現的,這些領域里幾乎沒有自動化。
與此相比,全棧機器學習工程師正在實現愈加強大的自動機器學習技術(AutoML),筆者可以為此編寫一個SOP(標準操作程序),并將訓練分類器的任務交給實習生。軟件工程技能組各個部分的自動化淘汰還需時日。
(通常)機器學習是產品的補充而非產品本身
少數公司將人工智能作為其核心產品,而大多數公司將人工智能作為既有產品的補充。媒體可能會使用機器學習進行文章推薦,但其核心產品是寫作或是出版平臺。
有趣的是,大多數公司將機器學習用于簡單和相似的用例。這使得單個公司很容易將上述用例作為軟件及服務(SaaS)產品。再然后,突然之間初創企業不再需要在內部構建它了。
這與極度復雜且定制化的基礎設施問題形成對比,亞馬遜網絡服務(AWS)上沒有能在短時間內處理Medium基礎設施的現成方案。
基礎設施正變得異常復雜
亞馬遜云服務(AWS)已經拓展出200多種不同的云服務。Heroku在云中運行應用程序的平臺即服務(PaaS)方法很不錯,但很昂貴?,F在有一個全新的云服務平臺來進行管理(網絡、數據庫、服務器),在這里,一個小失誤可能會引發很大的安全隱患。
有一個名為“云工程”的完整開發子集,其任務是使軟件在AWS、GCP或者Azure上運行。在小公司中,建設基礎設施的任務通常落在高級開發人員的肩上。這個任務很復雜,但同時也意味著寶貴的工作機會和難以復制的技能。
前端開發正在持續發展
當筆者開始做開發時,還可以用jQuery構建響應式前端。但不久后公司轉向了Angular或者React,Angular升級為Angular2(突發的改變),React將類組件轉換為功能組件,并加入了hook。以上這些框架/函數庫的工作方式完全不同。
一些公司致力于基于模型自動生成前端。但筆者的同事們一致認為,我們距離高質量產品還有很長一段路要走。
軟件開發十分復雜,但這種復雜性意味著不可替代的技能,這非常有利于就業。廣泛的技能組合賦予了人們端到端解決實際問題的能力。為了構建一個能使普通人自行解決問題的社區,軟件工程是一個不錯的開端。
機器學習該何去何從呢?它仍然擁有一席之地,但顯然,解決問題比訓練模型更為重要
評論