软件工程模块开发卷宗_数据科学家应该了解的软件工程实践
本文最初發表在 Towards Data Science 博客,經原作者 Kurtis Pykes 授權,InfoQ 中文站翻譯并分享。
最近,我在 LinkedIn 上進行了一次民意調查,我驚訝地發現,很多人持有這樣的觀點:數據科學家必須懂得編程標準并遵循工程最佳實踐。
許多 數據科學家(包括我自己)都缺乏基本的統計學知識,對統計學的應用知之甚少。而數學家們認為,在應用之前,必須對應用于各種場景的原理有一個堅實的理解,我承認我并不了解這些原理。軟件工程師希望數據科學家能夠在遵循基本編程原則的同時進行實驗。
最讓我感到刺痛的是,每一位“贊成”的投票者目前都在擔任數據科學家,而且其中許多人還擔任領導角色(在投票時)——包括 4x Kaggle Grandmaster(Kaggle 數據科學競賽大師)Abhishek Thakur 這樣的人。好吧,我承認,你想要的角色決定了你對統計學和其他數學概念(如概率、線性代數和微積分等)的理解有多深——盡管基礎知識是絕對必要的——但軟 件工程實踐 呢?
我曾經也是數據科學家中的一員,人們認為我們只是數據科學家,而不是軟件工程師,因此我們的責任是從數據中提取有價值的見解,這仍然是一個事實,然而,這次調查擾亂了我的心智,讓我陷入了深深的思考。
作為一名數據科學家,為什么要必須了解軟件工程的基礎知識呢?
我記得我的目標——成為一名不可或缺的數據科學家。我的意思是,如果我不知道或不去學習軟件工程的基礎知識,那我就不是不可或缺的數據科學家了嗎?嗯,是的,基本上是如此。請注意,這句話做了一個假設,比如,你是一個數據科學家,所編寫的代碼很可能會進入生產環境。
在這一點上,我整理了一份清單,這些內容是軟件工程的基本原則,應該適用于數據科學家。但由于我沒有軟件工程的背景,因此我咨詢了很多軟件工程師的朋友,幫助我列出了這份清單,并教我如何寫出更好的生產 代碼。
下面是數據科學家應該知道的一些最佳實踐:
整潔代碼注意:首先我想向 R 編程語言的用戶致歉,因為我并沒有對 R 編程語言的編碼方面做過太多的研究,因此,本文提到的許多整潔代碼的技巧,將主要針對 Python。
我學的第一門編程語言是 Python,因為我的英語很流利,對我來說,Python ?與英語非常相似。從技術上講,這指的是 Python 編程語言的高可讀性,這是 Python 的設計者在意識到代碼閱讀的頻率比代碼編寫的頻率更高,特意設計成這樣的。
當一名經驗豐富的 Python 開發人員將部分代碼稱為非“Python 風格”時,他們通常意味著這些代碼行沒有遵循通用的指導原則,并且未能以被認為是最好的(聽說是最易讀的)的方式表達其意圖。
——《Python 編程之美:最佳實踐指南》(The Hitchhikers Guide to Python)
我將列出一些構成整潔代碼的因素,但我并不打算說得過于詳細,因為我相信,這些主題,有很多很棒的資源講得比我還好,比如這兩本書:《Style Guide for Python Code》和《Clean Code in Python》(譯注:這兩本書目前暫無中譯本)。
有意義且可發音的命名約定;
清晰度高于一致性;
可搜索命名;
使你的代碼易讀。
請記住,不只是別人會閱讀你的代碼,你自己也會閱讀。如果你不記得某些命名的含義,請想象一下別人會有什么希望。
模塊化這可以部分歸咎于我們學習數據科學的方式。如果一個數據科學家不能打開一個 Jupyter Notebook 并開始做一些探索,我會感到驚訝。但這就是 Jupyter Notebook 的作用:實驗!然而不幸的是,許多關于學習數據科學的課程并沒有很好地將我們從 Jupyter Notebook 轉移到腳本上,而腳本對于生產環境來說更為有效。
當我們談論模塊化代碼時,我們指的是被分離成獨立模塊的代碼。通過有效地執行,模塊化可以使打包、測試和可維護的代碼能夠重復使用。
在這個視頻中,Abhishek Thakur 為 Kaggle 競賽構建了一個機器學習包,這是我第一次接觸到模塊化。我以前也聽過 Abhishek 提到過,他學習更多模塊化和軟件工程最佳實踐的方式是通過閱讀 GitHub 上的 Scikit Learn 代碼。
其他有助于編寫好的模塊化代碼的其他因素包括:
不要重復你自己(Don't repeat yourself,DRY):是面向對象編程中的基本原則,程序員的行事準則。旨在軟件開發中,減少重復的信息,編程過程中不寫重復代碼,將能夠公共的部分抽象出來, 封裝成工具類或者用 “abstraction” 類來抽象公有的東西,降低代碼的耦合性,這樣不僅提高代碼的靈活性、健壯性以及可讀性,也方便后期的維護或者修改。
單一功能原則(Single Responsibility Principle,SRP):是一種計算機編程原則,規定每個類都應該有一個單一的功能,并且該功能應該由這個類完全封裝起來。
開閉原則(Open-Closed Principle):在面向對象編程領域中,開閉原則規定 “軟件中的對象(類、模塊、函數等等)應該對于擴展是開放的,但是對于修改是封閉的 ”,這意味著一個實體是允許在不改變它的源代碼的前提下變更它的行為。
重? 構代碼重構可以定義為在運行時不改變代碼外部行為的情況下重構現有代碼的過程。
重構旨在改進軟件的設計、結構和 / 或實現(其非功能屬性),同時保留其功能。
重構代碼有很多好處,例如,提高了代碼的可讀性,降低了復雜性,這反過來又導致源代碼更容易維護,并且我們配備了一個內部架構,提高了我們編寫的代碼的可擴展性。
此外,我們不能只談論代碼重構而不談論性能的提高。我們的目標是編寫一個執行速度更快、占用內存更少的程序,特別是當我們有最終用戶要執行一些任務時。
測? 試注意:在機器學習模型的部署 Udemy 課程中,我簡單學習了測試(以及本文所涉及的其他大多數想法)。
在某種意義上,數據科學是一個有趣的領域,即使我們的代碼有錯誤,但我們的代碼仍然有可能能夠運行,而在軟件相關項目中,代碼會拋出一個錯誤。因此,我們最終會得到誤導性的見解(也可能找不到工作)。因此,測試是必要的,如果你懂得測試,你的身價就會上升。
以下是我們進行測試的一些原因:
確保我們得到正確的輸出。
更新代碼更容易。
防止將破壞的代碼推送到生產環境。
我相信還有更多的原因,但我不再就此贅述。
代碼審查代碼審查的目的是通過推廣最佳編程實踐來提高代碼質量,使代碼能夠為生產做好準備。此外,這對每個人都有好處,因為它往往會對團隊和公司文化產生積極影響。
代碼審查的主要原因是為了發現錯誤,盡管審查對于提高可讀性以及確保滿足編碼標準非常有用。
結 語可以這么說,這絕對是一大堆需要學習的東西,但出于完全相同的原因,它推動了數據科學從業者被高估。能夠制作出 Jupyter Notebook 已經不足以讓你成為數據科學家脫穎而出,因為每個人都能做到。如果你想超越平均水平,你就必須做超過平均水平的事情,在這種情況下,可能要涉及到學習軟件工程最佳實踐。
作者介紹:
Kurtis Pykes,癡迷于數據科學、人工智能和商業技術應用。
原文鏈接:
https://towardsdatascience.com/data-scientist-should-know-software-engineering-best-practices-f964ec44cada
你也「在看」嗎??
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的软件工程模块开发卷宗_数据科学家应该了解的软件工程实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程方法学18:多维数组收尾
- 下一篇: Log4j2 漏洞