不到500行Python代碼,你能寫出什么東西?Github上一個名為“500lines”的開源項目集結了眾多業內較為知名的開發者,同時,所有貢獻項目的代碼行數均在500行以內。完整版本每章包含一個程序演練,該程序在至多500條源代碼行中解決了軟件工程中的規范問題。來看看業內一線的編程大牛能在500行代碼之內編出什么程序吧!
每位建筑師在學習期間都會研究家庭住宅、公寓、學校和其他常見建筑類型。同樣,每個程序員都應該知道編譯器如何將文本轉換為指令,電子表格如何更新單元格以及數據庫如何高效保持數據。
▲項目完整清單
很多書籍和資料會給出非常棒和相對成熟的高級架構,但這些可能并不實用,當代碼行數縮減,很多不必要的設計就會被避免,選擇什么樣的接口、框架、如何擴展、如何合理利用繼承等會變得很重要,這對于程序員來說,很容易被吸收。
該項目重點關注有經驗的程序員在編寫代碼時所做的設計決策和權衡:
為什么用這些特定的接口將應用程序分成某些特定模塊?
為什么要在這里繼承?
如何預測程序可能需要擴展的地方,以及如何讓其他程序員使用更容易?
(以下為500 Lines or Less項目內包含的部分開源項目簡短介紹,完整項目文件和解說均可通過文末鏈接查看)
1、500 Lines or Less——可視化編程工具(Blockcode)
該項目主要用于為龜圖(turtle graphics)實現塊語言,通過簡單拖放創建圖案,整個過程通過常用的Html、CSS和JavaScript來實現(每一個塊由html元素組成,CSS用于設置樣式,JavaScript時間處理器進行拖拽并修改參數)。其次,作者將塊構建為一個框架以服務其他編程語言。
▲操作視圖效果
該項目也是圖形編程的一種方式,目前圖形編程也被廣泛應用于低年級學生編程教學中。Github上也有很多類似項目,雖然編程語言可能不同,但實現邏輯有異曲同工之妙。
2、500 Lines or Less——持續集成系統
該項目作者曾任職于Mozilla,后轉去Twitch工作,一直致力于在保證代碼安全的前提下提升程序員的編碼速度。
在這個敏捷開發、敏捷交付的時代,很多程序在上線前的測試都不完整。多數情況下,開發人員會在開發過程中直接測試代碼以確保功能實現的完整和穩定,隨著版本的不斷迭代,需要進行的測試越來越多,持續集成系統可以很好地解決這類問題,在開發環境中對不斷迭代的代碼進行完全測試。
這類系統主要功能就三項:獲取更改后代碼、自動測試代碼、生成測試報告。但是,這個過程必須是穩定的、正確的以及可恢復的。
3、500 Lines or Less——Python 解釋器
該項目名為Byterun,是一個用Python實現的Python解釋器。它的結構與CPython非常相似,但是Byterun更小。它最大的缺點是速度略慢,但已經可以解析大多數代碼了,畢竟這是500行代碼以內完成的,肯定會有一些不足。而且,CPython基于C語言實現并做了大量優化。
作為一個解釋器,Byterun很容易被理解,如果你希望搞清楚一個解釋器的編寫過程,這是一個非常不錯的嘗試,并且Python語言本身就很容易理解。
4、500 Lines or Less——簡單的對象模型
該項目主要實現了一套簡單的對象模型,先實現一個簡單的類與實例,并能夠通過實例訪問一些方法,這是很多早期面向對象語言所采用的面向對象模型。然后,在此基礎上逐漸擴展,進一步優化性能得到一個低配版的Python對象模型。
5、500 Lines or Less——光學文字識別
該項目涉及目前大火的人工智能技術,項目說明針對人工智能、反向傳播進行了部分解說,對于想要進入人工智能領域的開發者而言,這是非常棒的學習資料和實踐項目。
作者利用前饋神經網絡探索搭建了一個OCR系統,主要由5部分組成,分別寫在5個文件之中。它們是:客戶端(ocr.js)、服務器(server.py)、簡單的用戶界面(ocr.html)、基于反向傳播訓練的ANN(ocr.py)、ANN的實現腳本(neural_network_design.py)
6、500 Lines or Less——決策采樣器
有一定數學基礎的開發者對采樣、多項分布、隨機分布等名詞一定不陌生,簡單來說,該項目將整個過程通過編程方式來實現。
7、500 Lines or Less——模板引擎
Web應用程序是典型以文字為主的常見任務,這類應用程序最重要的一個階段就是將生成的HTML送到瀏覽器,一般的HTML至少會包含一些小的動態數據,比如用戶名之類的。對于如何生成一個動靜態數據混合的大型字符串是很多開發者一直在嘗試解決的問題,模板引擎就是這樣一個解決方案。
8、500 Lines or Less——簡易web服務器
盡管互聯網技術發生了天翻地覆的變化,但過去20年里,網絡核心的改動卻不多,大多數web服務器仍然遵循以前的方式處理數據,這個簡易的web服務器同樣如此,如果你想了解web服務器的簡單搭建過程,這個開源項目絕對是最好的選擇。
完整的開源項目清單當然遠不止這8個項目,但部分項目尚未出現中文翻譯版,中文版地址中涵蓋了所有開源項目的具體說明鏈接,如果有興趣,可以自行移步至Github平臺。
▲中文翻譯完成現狀
Github開源地址英文原版:https://github.com/aosabook/500lines
Github開源地址中文版(待完成):https://github.com/HT524/500LineorLess_CN