機器學習正變得越來越容易,然而軟件工程仍然很困難
這是一篇評論文章。 它也有偏見。 我認為,如果有更多的通才和創造者(而不是專家)來構建事物和解決問題,那么世界將會是一個更好的地方。
在過去的五年中,機器學習變得更加容易。 同時,軟件工程比以往更加復雜。
對于軟件工程師來說,這是一件了不起的事情。 但不適用于機器學習專家。
這是ML向軟件工程和數據科學向數據分析的發展。
機器學習工具正變得越來越平易近人
隨著ML的發展,云服務的市場也在增長,理解算法的價值也在下降。
從前,我們對算法進行了手工編碼。 然后,Sklearn允許在幾行代碼中執行相同的操作。
原始的TensorFlow很難使用。 Keras讓一切變得簡單。
Google,Microsoft和Amazon現在都提供服務以選擇,訓練和調整云中的模型,然后立即在API后面提供模型。
任何人都可以訓練AI,這將需要一段時間。 但是隨著復雜性的降低,它成為了經驗豐富的軟件工程師的另一種工具。
機器學習開發集中在幾種語言中
語言是護城河。 句號
你知道COBOL嗎? 如果是,那么您就可以終生工作。 世界的金融體系取決于它。 沒人再學習COBOL。
大多數機器學習都是用Python實現的,而軟件開發則分布在多種語言中。

> https://www.tiobe.com/tiobe-index/
如果每個ML工程師都有Python的經驗,那么您將與每個ML工程師競爭。 在軟件方面,您只能與使用相同技術的部分工程師競爭。
我總是驚訝地看到很多高薪的Ruby on Rails工作。 它在幾年前就已經過時了,但是由于遺留原因,許多大型公司(Shopify,Instacart,Kickstarter等)都堅持使用它。
您絕對可以并且應該學習多種語言。 成為一名優秀的軟件工程師取決于此。
軟件工程包含更大范圍的技能
我們希望軟件工程師至少對一切都有一定的了解。

> A quick sketch
后端工程師仍然知道瀏覽器的工作方式。 前端工程師具有一些數據庫概念。 兩者都可以防止SQL注入之類的安全漏洞。
對軟件有全面的了解,可以更輕松地更改專業。 它還使您能夠構建端到端解決方案。
廣泛的技能組使軟件工程師更適合模棱兩可的環境。 隨著需求的增長,軟件工程師通常會轉向數據科學。 相反,數據科學家開發軟件的可能性較小。
隨著人們開始將其視為硬編碼的條件邏輯的替代方案,我們將看到更多從事ML的軟件工程師。
成為有能力的全棧開發人員需要多年
并包含許多離散技能。
從字面上看,優化數據庫,構建API微服務和構建響應前端的共同點是零。 它們可能以3種不同的語言實現。
在這些領域,我們幾乎看不到任何自動化。
與此形成鮮明對比的是,全棧ML工程師現在正在完成功能日益強大的AutoML,為此我可以編寫SOP,并將培訓分類器的工作委托給實習生。
尚需時日,軟件工程技能套件中的所有組件都將不存在。
機器學習不是產品而是產品的補充(通常)
少數公司將AI作為其核心產品,但大多數公司使用AI來補充現有產品。
媒介可以使用機器學習來獲得文章推薦,但核心產品是寫作/發布平臺。
有趣的是,大多數公司都將ML用于簡單和相似的用例。 這使單個公司可以輕松地將上述用例作為SaaS產品提供。 然后突然之間,初創公司不再需要在內部進行構建。
基礎設施變得異常復雜
AWS已擴展到200多種不同的云服務中。
Heroku在云中運行應用程序的PaaS方法很棒。 但是在任何規模上都變得過分昂貴。
因此,現在我們有了一個全新的云堆棧來管理(網絡,數據庫,服務器),其中一小筆便會打開巨大的安全漏洞。
有一個稱為"云工程"的整個開發子集,其工作是使軟件在AWS,GCP或Azure上運行。
在較小的公司中,基礎設施通常落在高級開發人員的腿上。
這是復雜的東西。 但這也意味著工作和難以復制的技能。
前端開發在不斷發展
獨自掌握前端開發是一項技能。
當我開始開發時,可以使用jQuery構建響應式前端。 然后公司搬到了Angular或React。 Angular變為Angular 2(具有重大更改)。 React從類轉移到功能組件,并添加了掛鉤。
以上所有框架/庫都以根本不同的方式工作。
有幾家公司致力于基于模型自動生成前端。 但是同事們的共識是,他們離生產質量還有很長的路要走。
前端開發的技術能力,加上對像素完美的感知,暫時令人驚訝。
結論
軟件開發是復雜的,并且包含各種各樣的問題。 這種復雜性有利于就業。
但更重要的是,廣泛的技能組賦予了端到端解決實際問題的能力。
要建立一個使普通人有權解決自己社區中的問題的社會,軟件工程是一個不錯的起點。
機器學習有地方嗎? 絕對。 但是解決問題比訓練模型還重要
學習軟件工程。 做東西。 解決問題。