華文網

不到500行Python代碼,你能編出什麼?這些Github大神太牛了!

不到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

它最大的缺點是速度略慢,但已經可以解析大多數代碼了,畢竟這是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