機器學習變得越來越容易,但軟件工程仍然很困難

作者聲明:本文是一篇評論文章,僅代表本人觀點。我認爲當世界上有更多的通才和實幹者(不只是專家)來構建事物和解決問題時,這個世界會變得更好。

在過年的五年中,機器學習變得更容易了。與此同時,軟件工程比以往任何時候都要複雜。

對於軟件工程師而言,這是一件好事。但對於機器學習專家而言,這並不是好事。

這是機器學習向軟件工程靠攏的進程,也是數據科學向數據分析靠攏的進程。

本文由Chris發表在medium.com,經原作者授權由InfoQ中文站翻譯並分享

機器學習工具正變得越來越易用

谷歌希望讓所有人,無論技術背景如何,都能很容易掌握機器學習模型的訓練方法。(參見:技術民主化

隨着機器學習變得越來越容易使用,雲服務的市場也在增長,而理解算法的意義也在下降。

曾經,我們需要人工實現算法。現在Sklearn使得同樣的算法只需幾行代碼就能實現。

原本的TensorFlow很難使用,Keras讓它變得簡單多了。

現在,谷歌、微軟和亞馬遜都提供選擇模型、訓練模型和調參的雲服務,然後通過一個API就能立刻部署一個模型。

我們離人人皆可訓練人工智能的時代還有一定的距離。但隨着複雜性的降低,訓練人工智能變成了熟練軟件工程師知識體系中的一個新工具而已。

機器學習開發僅侷限於幾種語言

語言即是護城河。就這麼簡單。

你瞭解COBOL嗎?如果你熟悉這個語言,你這輩子都不愁沒有工作了。這個世界的金融體系都建立在這個語言之上。但現在已經不再有人學習COBOL了。

大部分的機器學習算法都是通過Python來實現的,而軟件工程開發需要各式各樣的語言。

image

如果每個算法工程師都有Python的開發經驗,那你就需要與所有算法工程師競爭。而在軟件開發方面,你只需要與一部分使用同樣技術棧的工程師競爭即可。

我常常會驚訝地看到很多高薪的Ruby on Rails開發的職位在招人。它在幾年之前就已經過時了,但很多大公司(Shoptify、Instacart、Kickstarter等等)由於歷史原因還在使用它。

你肯定可以同時也必須學習多種語言,這是一名優秀的軟件工程師的必備素質。

軟件開發囊括更多的知識技能

我們期待軟件工程師對所有領域都至少有一點了解。

image

一位後端工程師也知道瀏覽器如何運作,一位前端工程師對數據庫也有一定的瞭解。他們都能避開類似SQL注入的安全漏洞。

如果你擁有對於軟件工程的整體理解,就更容易切換所專注的領域。這同時也讓你具備構建端到端解決方案的能力。

廣泛的知識技能體系使得軟件工程師更適用於多樣的可能性。隨着市場需求的增長,經常有軟件工程師轉到數據科學領域。與之相反的是,數據科學家通常不會開發軟件。

隨着人們開始認爲機器學習是硬編碼的條件邏輯的替代方案,我們在將來會看到越來越多的軟件工程師從事機器學習工作。

成爲一名優秀的全棧工程師需要好幾年

並且,成爲一名優秀的全棧工程師需要掌握很多互不相干的技術。

優化數據庫、構建API微服務以及建造一個響應式的前端,三者之間幾乎沒有共同之處。它們可能需要通過三種不同的語言來實現。

在這些領域,我們目前幾乎沒有看見任何自動化方案。

相比之下,全棧算法工程師正在和越來越強大的自動機器學習(AutoML)競爭。使用AutoML的情況下,我甚至可以寫一個標準作業流程(SoP),然後把訓練分類器的工作分配給實習生。

而軟件工程中所有技術都被自動化,不再需要人力參與的那一天還遠未到來。

機器學習爲產品添磚加瓦,但機器學習本身大多不是產品

很少有公司把人工智能作爲它們的核心產品,而是使用人工智能讓現有產品更加完善。

Medium也許使用機器學習來推薦文章,但是它的核心產品是文章寫作與發佈的平臺。

有趣的是,大多數公司將機器學習應用在簡單且相似的場景。這樣一來就更容易出現爲這種場景提供軟件即服務(SaaS)產品的企業。然後突然之間,初創企業發現自己不用再費力開發自己的方案了。

相比之下,系統基礎架構的問題是極度複雜而不通用的。AWS上在不遠的將來也不會有現成的解決方案可以處理Medium的基礎架構。

基礎架構正在變得異常複雜

AWS已經膨脹到擁有超過200個不同的雲服務了。

使用Heroku的產品即服務(PaaS)方案來運行應用是一個不錯的方案,但它在產品規模擴大後就變得非常昂貴。

因此,我們現在需要管理一個全新的雲技術棧(網絡、數據庫、服務器),其中一個小失誤就能導致巨大的安全漏洞。

開發工作中的一部分是雲技術開發。其工作是使得軟件能在AWS、GCP或者Azure上運行。

在小型公司裏,基礎架構的工作往往由高級開發者來負責。

基礎架構是一個複雜的東西,但它同時也意味着工作機會和難以被取代的技能。

前端開發正在不斷髮展

能跟上前端發展的步伐本身就是一個技能。

我剛開始從事開發時,使用jQuery來構建響應式的前端還不算太難。隨後,大量公司開始使用Angular或者React。Angular推出了Angular 2(伴隨着巨大的改變)。React從類轉移到函數組件,並添加了hooks函數。

以上所有的框架或者庫都以完全不同的方式運作。

也有一些公司正在構建基於原型(mockup)的自動化前端。但是我的同事們一致認爲,它離達到生產環境的要求還很遠。

前端開發方面的技術能力需求,加上對"什麼是像素級還原"的理解要求,都令人感到前端開發一時之間仍不可替代。

結 語

軟件工程是複雜的,並且包含了各種各樣的問題。這種複雜性有利於軟件工程師的就業。

但更重要的是,這種完備的技術體系代表了能解決真實的、端到端的問題的能力。

要建立一個讓普通人能解決自己所在領域問題的社會,軟件工程就是一個不錯的開端。

機器學習還有自己的一席之地嗎?當然有。但是解決問題遠比訓練模型更重要。

去學習軟件工程,做點東西,並且解決問題吧。

原文鏈接:

https://towardsdatascience.com/machine-learning-is-getting-easier-software-engineering-is-still-hard-d4e8320bc046

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章