Python后臺處理模塊接入的緣由
前面的后臺搭建都是基于Java EE的,但后面隨著對機器學習的深入,慢慢發現大多數機器學習的算法實現都是基于Python和R語言的。R語言主要集中在對數據的預處理、分析和展示,而Python不但囊括了R語言的功能,還延伸到了網絡請求、Web服務、數據抓取等方方面面。Python不但在語法上入門簡單、在開發環境的搭建上相對容易,開發IDE也很完善易用。在機器學習領域有很多現成的算法庫,開源工具包非常完備。Python一旦入門,絕對會對它愛不釋手的 :)
Python學習的個人經驗
既然是個人經驗,就要先交代下自己在學習python之前的編程經歷。從大學一年級接觸C語言,并在大學二年級在電子設計競賽中投入真正的開發使用,直到進入互聯網公司之前,都是在使用C語言做底層驅動和中間件開發,使用C++做業務邏輯開發。進入互聯網之后開始接觸Java,并進行Android中間件和應用開發。在業余時間自學了Java EE的開發流程并了解了Web前端開發的基礎知識。
我的Python學習比較簡略:
快速入門
在網上看一篇關于Python的入門帖子,比如www.runoob.com/python/python-basic-syntax.html,在這個過程中了解語言特性和基本語法、搭建基本的運行環境,這個過程1~2個小時足矣。
全局把握
對Python有了基本的了解和認識后找一本大而全的教科書,比如《Python基礎教程》(我找了本電子版),這是一本很厚的書。然后查看目錄,并逐頁“掃讀”(所謂“掃讀”就是非常快速的粗略閱讀和跳讀,在閱讀的過程中并不需要逐行逐句,而是要粗枝大葉)。對于“魔法方法、屬性和迭代器”這樣的章節可以仔細研讀,對于“條件、循環和其他語句”這樣的章節可以一掃而過、對于“圖形用戶界面”這樣的章節則可以直接跳過不看。整個過程的一個核心思想是:
1. 對比閱讀,發掘Python相對于自己以往掌握的語言有哪些相同點和不同點;
2. 系統把握,明了整個Python語言的系統體系和知識組成;
3. 確定目標,掃讀的目標是在后續如果遇到相應的Python問題,能夠快速的定位到具體的知識點,并查詢答案(這本大厚書可以在以后作為字典類的工具書使用)
第二個步驟需要半天到一天的時間。
工程實踐
在Python終端敲簡單的命令顯然無法滿足我們的工程需要,一個完整的工程開發需要便捷的開發工具和清晰的模塊關系。這里我使用DevPy+Eclipse搭建IED開發環境,工程中引入包、模塊、類等Python特性來明晰項目中的模塊關系。在開發中遇到問題則通過查詢《Python基礎教程》或在網上搜尋解決方法。
Python后臺處理模塊的功能和接入方式
Python的后臺處理模塊主要用來做機器學習相關的處理工作。Python模塊引入了Tornado Web引擎,對外以REST API的形式提供服務。所以簡單的說Python的后臺處理模塊也是像基于Java EE一樣的Http Web服務。
后記(自己的語言學習感悟)
匯編語言
對于匯編語言相信絕大多數同學除了在《微機原理》的實驗課上使用過之外,應該在真實工作中很少有接觸,即便對于很多嵌入式開發的同學在工作中也很難接觸的到。我在工作中唯一的實踐經歷是修改中斷向量表。是在一個沒有MMU的MCU上保證運行的ucOS系統能夠有獨立的Bios、Bootloader、App三個獨立的運行空間。當時的解決方案是使用兩級中斷向量表:硬件觸發中斷后會自動跳轉到第一級的中斷向量表,而第一級的中斷向量表直接指向第二級中斷向量表。第二級中斷向量表會通過檢查硬件管腳的狀態轉跳到Bios、Bootloader、App不同空間的處理代碼段。匯編語言的學習重點不是語言本身,而是機器運行的機制。
C語言
相比于匯編C語言確實算是高級語言了。對于互聯網的同學來說C語言的語法很簡單,C語言的指針又很眩暈,在功能開發上,很簡單的事情要寫上一大堆代碼。其實業務開發并不是C語言的優勢所在,C語言更多是為了取代匯編,同樣C語言的學習重點也不在于語言本身,更在于對系統運行機制的理解,所以,C語言更多的應用場景是驅動開發和協議解析。
C++
相比于C語言,C++對業務邏輯的處理能力大大增強,同時,設計模式在C++中的應用也變得得心應手。但C++只能算的上C語言的升級版,作為程序員,并不能完全脫離系統原理的限制,將全部的注意力放在業務邏輯的實現上。但劣勢同樣也是優勢,正是C++同系統的相關性才使得C++在嵌入式設備和實時性較高的核心中間件領域留有一席之地。
Java
相對于C++,Java實現了完全的面向對象。從解放勞動力的角度講,Java實現了一次飛躍。開發人員再也不用被底層的系統機制所牽絆,將自己的更多精力放在業務邏輯本身,同時,Java的各種工具支持包也很完備。這也很好的解釋了,為什么嵌入式領域一個項目的開發周期往往是2~3年,開發成員往往是幾十甚至是幾百人。而互聯網產品很多都是幾個人或一個人,一周或一個月的作品。但不可否認,Java自身的運行機制,導致它對系統資源的高要求和運行時的低效率,這也是Java在特有領域不能完全替代C++的原因。
Python
在接觸Python之前,我一直認為Java是用起來最爽的語言(簡單的運行和開發環境搭建、功能強大的IDE工具、完備的工具包支持),但接觸到Python之后才發現我的結論下的太早了。相比于Java,Python除了是腳本語言、動態語言這樣的基本屬性之外,Python的一個很大的特點是簡潔。Python能夠使用更少的代碼,更少的依賴完成你想要的工作。
當然語言和算法一樣,沒有一個算法能使用所有的場景,也沒有一種語言能駕馭所有的領域。