談談程式設計 1 程式設計概述

2021-08-22 01:40:43 字數 1872 閱讀 8519

程式設計術可以看作實用魔法的乙個分支。程式設計魔法師用時間和精力做祭品,與生活在計算機中的精靈訂立契約,以換取駕馭**的能力。

---fmddlmyy

本文將從不同角度討論「什麼是程式設計」,或者「什麼是程式設計的本質問題」。這些討論並不是要得出什麼定義,我們實際上是在表述各種程式設計思想,以期加深對程式設計的理解。

我們的世界是模糊的、連續的、不精確的,但軟體是精確、離散的、形式化的,這就注定了軟體不能完全描述現實世界。因此我們需要知道描述哪些部分,忽略哪些部分,這就是軟體的本質問題。

--- tom demarco

程式設計不是藝術。程式設計不追求完美,它的目的是解決問題。

和藝術上的「只能意會,不可言傳」相反,程式設計甚至不能忍受自然語言的模糊性,它要求問題被表述成可編譯、可執行的**,文字和圖表只是輔助交流的工具。

每個程式設計師有兩個面具:職業的和專業的。戴上職業面具後,程式設計師會用能找到的最好用的工具,以盡可能簡單的方式,在合理的成本內解決問題中必須解決的部分。

而戴上專業面具的程式設計師,會不厭其煩地學習各種程式設計知識(很多都不是職業需要的),積累經驗值,吸收可復用的模式和思想。他們會用大量時間去理解程式的表象和cpu的彙編**之間究竟發生了什麼。他們有著探索未知領域和練功公升級的強烈慾望。

他們在不斷接近技藝的完美,而這個技藝本身是以不談完美、但求有效的方式解決問題。他們付出了大量的努力,而這些努力的驅動力是好奇心和進取心。如同《魔法學徒》中描述的魔法師,乙個魔法師所追求的東西只有志趣相投的魔法師才能理解,而不管他們出於哪個陣營。了解事物真相本身帶來的滿足就可以作為一切努力的回報,

任何乙個正在構建大型系統的人,天天面對的中心議題就是:如何剔除不必要的、人為的、自找的複雜部分,並控制好剩下的,無可逃避的複雜性。

--- betrand meyer

程式設計可以被看成一種管理工作,管理的物件是**,控制的物件是**的複雜性。

中國的傳統思維比較喜歡談本質,追求一種稱作「道」的東西。而在程式設計上,表象和本質同樣重要。所有程式說到底不過是一些彙編語句的組合,但了解這個本質在大多數場合都不能有助於解決實際問題。

寫**是為了解決實際問題。當**的數量增加到一定程度,對**自身的控制也會成為乙個重要的問題。數量改變了本質。

管理的要訣是削弱、孤立被管理的物件,「使民無知」,「使民」「雞犬之聲相聞」卻「至老死」而「不相往來」。每個被管理的物件在完成自身工作的前提下,對其它物件的了解應當盡可能少。通過盡量降低物件間的耦合程度來控制複雜性。

只有有效地控制複雜性,我們才能使用越來越大的資訊塊,駕馭越來越多的**,用這些0和1的操作去實現前人沒有,甚至無法完成的工作。

程式設計技藝的核心是**的復用。復用已有的知識是積累、提高的前提,否則就會像誰誰誰那樣每天推石頭上山,而不能累進。在上帝看來,重複是一種懲罰的手段。

程式設計這個職業知識更新比較快,可以學習的東西也很多。有些人覺得累,但有些人卻覺得其樂無窮,覺得從事這個職業是很幸運的事情。

程式設計的實質是建築,根據應用的需求,不斷建築更大的資訊塊。我們所寫的所有程式,都可以被看作對語言的擴充。事實上,我們在不停地開發新的語言,我們所寫的每個函式、每個類都是在為現有語言增加新的功能。我們按照適合特定應用的模式,組合各種資訊塊,完成實際的應用。這些資訊塊有的是我們自己做的,有的是拿來的。

資訊塊可以被組合的關鍵就是簡單、明確的介面。所以,我們應當針對介面程式設計,而不是針對應用程式設計。應用意味著變化和不可復用。將應用合理分解為模組,定義好模組間的介面,然後按照介面構建模組。模組分解的原則是:

針對介面程式設計的好處有兩個方面:

人們用各種方式復用知識,其實c語言本身又何嘗不是知識的復用呢?其它復用方式包括:庫函式、新的語言和編譯器、新的指令碼、類庫、程式框架、設計模式、物件導向、面向元件、面向服務、面向方面、面向領域、各種開源**、開發環境提供的各種wizard和糖衣、各種**生成工具等等。充分了解程式設計環境,善於復用各種資源,是程式設計師的基本功。

SSL程式設計 1 概述

ssl支援可選的客戶端驗證,在面向特定使用者的高安全性應用中,如網銀 第三方支付等,伺服器也需要驗證客戶端的身份。基於使用者數字證書的ssl客戶端驗證,能夠提供比口令更強的安全性。這一點,在央行2015支付規範中得到了認可。規範明確了,第三方支付機構如果採用基於數字證書的客戶端驗證,不受單日最多50...

SSL程式設計 1 概述

ssl支援可選的客戶端驗證,在面向特定使用者的高安全性應用中,如網銀 第三方支付等,伺服器也需要驗證客戶端的身份。基於使用者數字證書的ssl客 戶端驗證,能夠提供比口令更強的安全性。這一點,在央行2015支付規範中得到了認可。規範明確了,第三方支付機構如果採用基於數字證書的客戶端驗證,不 受單日最多...

程式設計模型隨筆 1 概述篇

程式是問題求解過程的表達,表達求解過程的語言統稱為程式語言。求解過程就是邏輯,就是順序 條件 迴圈三種形式,因此程式就是用特定的語言表示的邏輯,程式是形式,邏輯是內容。模型是對事物共性的抽象,程式設計模型就是對程式設計的共性的抽象。什麼是程式設計的共性呢?最重要的共性就是 程式設計時,的抽象方式 組...