- 編程與類型系統
- (美)弗拉德·里斯庫迪亞
- 878字
- 2021-01-29 11:51:20
Preface 前言
我將多年間學習類型系統和軟件正確性的經驗匯聚起來,加以提煉,并輔以現實世界的應用,編寫了這本實用的圖書。
我一直對編寫更好的代碼有濃厚的興趣,但是如果讓我準確說出從什么時候開始走上這條道路,我會說是2015年。當時,我換了團隊,想要快速學習現代C++。我開始觀看C++會議視頻,并閱讀Alexander Stepanov關于泛型編程的著作,從一種完全不同的視角了解了如何編寫代碼。
與此同時,我在業余時間學習Haskell,一步步了解它的類型系統的高級特性。在使用函數式語言進行編程后,就能夠很清晰地理解為什么隨著時間的推移,更主流的語言開始采用函數式語言中的一些被認為理所當然的特性。
我閱讀了關于這個主題的許多圖書,包括Stepanov的Elements of Programming和From Mathematics to Generic Programming,Bartosz Milewski的Category Theory for Programmers,以及Benjamin Pierce的Types and Programming Languages。從書名就可以知道,這些圖書更偏向理論/數學方面。在學習了關于類型系統的更多知識后,我在工作中編寫的代碼也變得更好了。類型系統設計的理論與日常生產軟件之間存在直接的聯系。這并不是一個革命性的發現:復雜的類型系統特性之所以存在,就是為了解決現實世界的問題。
我意識到,并不是每個程序員都有時間和耐心來閱讀那些提供數學證明、講解深入的圖書。但我閱讀這些書并沒有浪費時間,這使我成為一名更好的軟件工程師。我認為應該有這樣一本書:以更加輕松的方式來介紹類型系統及它們提供的優勢,并關注每個人能夠在日常工作中使用的實際應用。
本書旨在全面介紹類型系統的特性,從基本類型開始,涵蓋函數類型和子類型、OOP、泛型編程和高階類型(如函子和單子)。我沒有關注這些特性背后的理論,而是通過實際應用的方式來解釋每種特性,說明如何以及何時使用這些特性來改進代碼。
我一開始打算使用C++來編寫代碼示例。C++的類型系統十分強大,并且具有比Java和C#等語言更多的特性。但另一方面,C++是一個復雜的語言,而我不想限制本書的受眾,所以后來決定使用TypeScript。TypeScript也有一個強大的類型系統,但是其語法更加容易理解,因此即使你使用的是其他語言,在學習本書的大部分示例時應該也不會有太大的難度。附錄B為本書用到的TypeScript語法提供了一個速覽表。
我希望你能享受閱讀本書的過程,并學到一些可以立即用在項目中的新技術。
- 基于粒計算模型的圖像處理
- LabVIEW 2018 虛擬儀器程序設計
- Cross-platform Desktop Application Development:Electron,Node,NW.js,and React
- 編程珠璣(續)
- 營銷數據科學:用R和Python進行預測分析的建模技術
- Spring Cloud、Nginx高并發核心編程
- Getting Started with SQL Server 2012 Cube Development
- 嚴密系統設計:方法、趨勢與挑戰
- 軟件架構:Python語言實現
- QGIS By Example
- C語言課程設計
- Getting Started with LLVM Core Libraries
- Spring+Spring MVC+MyBatis從零開始學
- JavaScript程序設計(第2版)
- 軟件測試綜合技術