《卓越程式設計師密碼》讀後感
今年春節期間,我在圖靈社群購買了三本電子書,其中一本是《卓越程式設計師密碼》。這本書不厚,正文才158頁。閱讀過程也很輕鬆。
作者張家為(Ka Wai Cheung)先生在中文版序中說:
在程式設計的世界裡,我們會和各種各樣的“語言”打交道。雖然我主要的伺服器端開發語言是C#,但我的工作方法卻幾乎可以完全應用到Java、PHP、Ruby或Python上。程式語言雖有不同,核心的程式設計思想、方法和架構卻是高度類似的。我們只是用不同的方式來表達而已。
正好我目前主要也使用 C# 語言,興趣相投。我最初接觸計算機時學的是 PASCAL 語言。第二門語言是 C 語言,讀的是經典的 K&R 的《C程式設計語言》,當時還是第一版。以後逐漸學習了 C++ 語言。現在全面轉向 C# 語言,而且對 Linux 作業系統下的 Mono 很有興趣。
《卓越程式設計師密碼》由 50 篇短小精悍的文章組成。在閱讀過程中,很多話題都能引起我的會心一笑。比如第 30 篇談到為電梯設計軟體,要求要讓人們呆在電梯裡的總時間最短。這個目標是非常難以實現的,而且還是沒有什麼回報的複雜性,這就是一個難編就意味著難用的例子。傳統的電梯演算法既簡單,又好用。
在第 47 篇“程式碼是最好的初級程式設計師”中,作者給出了一個 C# 程式的程式碼片段:
public int sum_range_of_positive_integers_to_100()
{
int sum;
for (int i = 1; i <= 100; i++)
{
sum += i;
}
return sum;
}
這段程式碼用來計算從 1 加到 100 得多少。但是這段程式碼是有問題的,使用 C# 編譯器編譯時會報告以下錯誤:
error CS0165: Use of unassigned local variable `sum'
這種區域性變數未初始化的情況是初學者很容易犯的錯誤,作者在這裡也粗心了。還好 C# 編譯器會幫助我們避免這種錯誤。
如果是 C 語言,就沒這麼幸運了,編譯會通過,但執行結果很可能就不正確了。還好,有個 splint 工具也可以幫助我們:
Splint is a tool for statically checking C programs for security vulnerabilities and coding mistakes.
假設我們有以下 C 語言程式:
#include <stdio.h>
int main()
{
int sum;
printf("%d\n", sum);
return 0;
}
在 Arch Linux 作業系統中,使用 gcc 編譯,再使用 splint 工具檢查,結果如下:
work$ gcc a.c && ./a.out
0
work$ splint a.c
Splint 3.1.2 --- 14 Sep 2011
a.c: (in function main)
a.c:6:18: Variable sum used before definition
An rvalue is used that may not be initialized to a value on some execution
path. (Use -usedef to inhibit warning)
Finished checking --- 1 code warning
C 編譯器一聲不吭,而 splint 就報告可能存在問題。
在 C# 語言規範 的 5.1.7 Local variables 中提到:
A local variable introduced by a local-variable-declaration is not automatically initialized and thus has no default value.
對於 C 語言來說,在 K&R 的經典著作 《C程式設計語言》(第二版) 的 APPENDIX A: Reference Manual 的 A8.7 Initialization 中提到:
The initial value of an automatic object not explicitly initialized is undefined.
從上面的權威資料中可以看出,無論是 C 語言,還是 C# 語言,區域性變數不初始化是不行的。
此外,我還給《卓越程式設計師密碼》提了不少勘誤,有些已經被圖靈社群的編輯確認了,但還有些至今還沒有處理。
相關文章
- 程式設計師修煉之道讀後感02程式設計師
- 程式設計師修煉之道讀後感(2)程式設計師
- 程式設計師修煉之道讀後感(1)程式設計師
- 程式設計師修煉之道讀後感(3)程式設計師
- 《程式設計師修煉之道》 讀後感(七)程式設計師
- 程式設計師職業素養之讀後感程式設計師
- 10.29每日總結:《程式設計師修煉之道》讀後感2程式設計師
- 10.31每日總結:《程式設計師修煉之道》讀後感3程式設計師
- 程式碼大全讀後感(3)
- 程式碼大全讀後感(2)
- 程式碼大全2讀後感
- 《程式碼大全》讀後感3
- Java併發程式設計實戰——讀後感Java程式設計
- 《程式碼大全2》讀後感2
- JavaScript高階程式設計(讀後感-持續更新)JavaScript程式設計
- 高效程式設計師的45個習慣-敏捷開發修煉之道(讀後感)程式設計師敏捷
- 程式設計師修煉之道——從小工到專家,讀後感第一篇程式設計師
- 身為程式設計師寫一百萬行程式碼的感覺程式設計師行程
- 中軟卓越:Java程式設計師面試技巧3Java程式設計師面試
- 《碼農翻身》讀後感
- 程式碼規範&《數學之美》讀後感
- 一個程式設計師的負罪感程式設計師
- 程式設計師or碼農程式設計師
- 程式設計師高薪盛宴背後:程式設計師其實正在消失?程式設計師高薪
- 讀後感
- 程式設計師的酒後真言程式設計師
- 幽默:全棧程式設計師與前後端程式設計師區別全棧程式設計師後端
- 作為程式設計師為什麼要閱讀原始碼程式設計師原始碼
- 前端程式設計師請勿阻止密碼自動貼上功能 - cocoaphony前端程式設計師密碼
- 10.24程式設計師節專輯——程式設計師最愛的數字,1024的祕密程式設計師
- 《Android惡意程式碼分析與滲透測試》讀後感Android
- 讀後感3
- 讀後感1
- 讀後感2
- 程式設計師修煉之道——從小工到專家 的第二章讀後感——注重實效的途徑程式設計師
- 【讀後總結】程式設計師修煉之道---從小工到專家程式設計師
- 1024程式設計師節,向用程式碼改變世界的程式設計師致敬!程式設計師
- 程式設計師如何寫出好程式碼?程式設計師
- 程式設計師程式碼面試指南程式設計師面試