數據科學與人工智能從業者如何提升編程能力
大數據文摘出品
來源:medium
編譯:Hippo
我討厭編程!
這是我七年前在實習期間告訴同齡人的話。千真萬確。我不想像公交上那些面無表情的人那樣成為沒有感情的編程機器。
時至今日,我已經獲得了2個編程相關專業的研究生學位,先后在5家不同公司中擔任網絡開發人員,目前擔任計算機視覺工程師職位。
我熱愛編程!
這是我告訴所有問我為何如此熱衷技術的人的話。我對編程的熱愛源于這樣一個認識:使用代碼實現的應用確實為如今這個技術驅動的社會帶來了機遇。
本文介紹培養和提高我的編程能力的方法。這里將提供5種可以用來提高編程技能的策略。
算法練習
算法常常會嚇跑很多機器學習從業者,我自己也不例外。機器學習領域的興起使得通過啟發式算法來檢測模式的傳統方法不再成為必須,我們將特征檢測留給了神經網絡。
盡管如此,算法仍在軟件和計算領域中占有一席之地,并且肯定在機器學習領域中也不可或缺。算法練習是提高編程技能的利器之一。
除了在提高代碼內存效率的靈感方面具有顯而易見的好處,研究算法的另一個 好處是能很好的培養解決問題的思維方式。
用你所選擇的編程語言實現探索各種數據結構和數據修改方法的算法。了解如何利用數據對象、方法和其他有用的函數提高編程效率。
數據科學家經常使用數據挖掘和網絡爬蟲算法。充分了解算法和數據結構有助于生成高效的代碼,在實踐中執行速度更快,進一步減少項目交付時間。
不同算法的復雜程度也不盡相同,這里有一個供你熱身的簡單算法說明。相關鏈接可以參考這里:
https://towardsdatascience.com/algorithms-for-data-scientists-insertion-sort-6caa69f906b3
個人經驗:
作為移動計算機視覺工程師(Mobile Computer Vision Engineer),我將許多深度學習模型用于常見的計算機視覺(CV)任務中,例如姿勢評估、對象檢測等。
盡管PyTorch、TensorFlow和Keras等平臺轉移了模型實現的復雜性,但我發現有必要針對特定用例實現自定義算法。
例如,創建基于余弦相似度的姿態匹配算法或有效地遍歷作為機器學習模型輸出的數據結構。
為了確保我對各種算法的風險有足夠的了解,我買了一本很好的教材——《Introduction to Algorithm(第三版)》。不過這本教材可能對初學者并不是特別友好,在這種情況下,特別推薦諸如HackerRank這樣的平臺。
技術書籍
書本學習讓我感到自己回到了校園,沒有什么能比語言生動、內容詳實的書籍更讓人受益匪淺。
在我職業生涯的早期,我一直以為自己最終會停止觀看YouTube教程或是購買編程書籍,因為我已經獲得了“忍者級”的編程技能。
然而幾年來,我意識到無論已經到了哪個程度,都能了解到更多關于編程語言的知識。盡管我喜歡通過YouTube編程教程進行學習,但沒有什么能取代經典編程技術書籍中豐富而簡潔的知識。
例如,Python對于數據科學家來說算是一種易于掌握的標準編程語言。經過幾周的語法、數據結構和通用函數的學習,可以輕松實現和運行自定義python腳本。你可以進一步通過視頻學習具備Python的中級技能。
但是,Python中可以探索的內容還有很多,而且都可以提高你的編程技能。我學習有關Python語言的更深入內容的方式之一就是通過技術書籍,更具體地說是《Fluent Python》。本書并不適合初學者使用,而是主要針對中等以上水平的程序員提高編程熟練程度。
總之,技術書籍可以通過對編程語言簡單清晰的介紹來提高數據科學家的編程水平,也可以通過對編程語言的深入闡述,提高數據科學家的現有編程技能。
閱讀其他開發者的代碼
最近,我嘗試實現深度學習卷積神經網絡Inception Network。
盡管我已經有利用Python和TensorFlow庫實現的方法,但我對其他機器學習從業人員如何實現很是好奇。
我探索性的瀏覽了幾個GitHub庫,研究了其他開發人員的代碼,毋庸置疑,我學會了改進已有方案的方法,并且更好的應用了我現有的編程技能。
有大量的公共GitHub庫可供研究和學習。你不需要在Google或Facebook之類的技術公司工作就可以向他們的開發人員學習。只需瀏覽其工程師開發的項目的公共庫。對于數據科學家來說,這可能意味著探索諸如最近發布的Detectron2或其他開源機器學習工具之類的代碼庫。
在工作場所的內部開發團隊中進行代碼審查也是一種合適的學習方法。通過了解其他開發人員實現方法背后的理由和思路,你可以間接擴展自己的視野和編程知識。
學習不同的編程語言
致力于編程語言多樣性是提高編程水平的不二之法。程序員用代碼來解決問題,多種編程語言的知識擴展了可用于解決問題的工具。
掌握Python可能會幫助您學習數據科學核心的實際應用。但在專業和實踐環境中,軟件開發包含不同的平臺,每個平臺都有用于訪問和實現功能的特定語言。
專業的機器學習從業人員可能會在以下所示的方法中應用不同的編程語言:
- JavaScript從互聯網上抓取數據
- SQL修改和查詢數據庫
- Python實現算法和機器學習模型
- Swift / Kotlin / Java開發具有集成機器學習模型的移動設備應用程序
- 其他工具和方法
一旦您精通某種編程語言,掌握一種新的編程語言會容易很多。如果您了解常規的軟件開發范例,例如面向對象的編程、功能編程等,你將更加容易進入狀態。軟件開發范例知識適用于各種編程語言。
遵守軟件開發原則
擁抱簡單,避免重復并提高可讀性。
這些是我多年編程后積累的經驗。它們聽起來很簡單,但是大多數開發人員都沒有遵守,我自己有時也會忘記這些原則。
因此,在軟件工程業內,一些準則被反復提倡和強制實施,以確保開發人員進行簡潔有效的軟件開發。一些列出其中的一部分。
(1) KISS原則
去繁就簡(Keep It Simple Stupid,KISS)在開發軟件時強調了簡潔這個概念。解決問題的方法不必太復雜,在軟件開發的設計和實現階段采用簡潔原則可以確保代碼容易理解和便于維護。
是的,技術人員往往喜歡炫技,但為了便于閱讀,請保持簡單 ——美劇you are not MR.Robot |
(2) SOLID原則
Solid原則包含一組旨在確保面向對象的開發人員構建可復用、可擴展、可維護和高效的程序的原則。要了解有關SOLID中涵蓋的原理的使用和實踐的更多信息,請查看Katerina Trajchevska視頻中的內容。
相關鏈接:https://www.youtube.com/watch?v=rtmFCcjEgEw&ab_channel=LaraconEU
- 單一責任原則(Single responsibility principle)
- 開閉原則(Open-Closed principle)
- 里氏替換原則(Liskov Substitution principle)
- 接口分離原理(Interface segregation principle)
- 依賴倒置原則(Dependency inversion principle)
(3) DRY原則
不要重復自己(Don’t Repeat Yourself)。在編寫程序時,編寫執行已有功能的代碼會浪費你的開發時間。避免重復的一個好習慣是利用項目文件夾中的實用程序文件。實用程序文件包含在源代碼中經常執行的常見任務。
特別提及
(1) 個人項目
開展個人項目可以將數位機器學習從業者帶入新的領域、庫、平臺、框架和編程語言。
開展個人項目來提高你的編程技能的主要優勢在于開發軟件產品時會遇到各種問題。編程解決的每個問題都會增加你的整體技術水平。
(2) 分享經驗
教他人如何應用你擅長的語言編寫程序是一種行之有效的方法,可以提高編程技能并展示你的專業知識。 你可以通過YouTube視頻、在線課程或我最喜歡的媒體博文等多種方式分享經驗。
結論
提升編程技能是一次沒有終點的旅程。您總是可以在編程方面學習或改進。
嘗試著享受學習過程。
有時情況確實很棘手,StackOverflow可能無法解決所有問題,但請記住磨練你的技巧所花費的每一分努力都是最終融會貫通所必需的。
相關報道:
https://towardsdatascience.com/how-to-improve-programming-skills-for-data-scientists-and-machine-learning-practitioners-d865d8aadab1
【本文是51CTO專欄機構大數據文摘的原創譯文,微信公眾號“大數據文摘( id: BigDataDigest)”】