天天看點

程式員、黑客與開發者之别

程式員、黑客與開發者究竟有何差別?這個問題往往會引發踴躍的讨論與辯論。但是我看到的很多說法往往至少在一個重大方面是有瑕疵的,是以在此我願給出我的定義,希望這個定義能夠更準确些。

程式員是能夠通過操縱計算機代碼解決問題的人。他們的技能水準可高可低—從掌握基本腳本的入門級到可利用任何一門語言的絕對巫師都算是。

黑客是做東西的人。在本文背景下,是指通過對計算機程式設計做東西的人。這是對這個術語的原創、純粹的定義,比方說,你有了一個想法以後就設法 “破解” 某個東西讓它可以工作。這個詞也可用到修改東西使其功能發生重大改變的人身上,但是不像前面的定義用得那麼多。

開發者是正規教育訓練的程式員。他們并不僅僅要解決問題或者創造東西,而是按照一套設計和實施原則去做事。這些事情包括性能、維護、伸縮、健壯性以及安全等。

簡而言之,這三者都利用代碼去解決問題。程式員是一個涵括性術語,帶有問題解決者的含義,黑客是創造者 / 多面手,開發者是正規教育訓練的程式員,他們不僅解決問題,而且是采用(很可能是通過正規教育學到的)結構化和按照規定的方式去做解決問題。

關系

一個人可以是上述三種角色的組合。以下就是這三者的互相關系(參見下面的維恩圖)

程式員、黑客與開發者之别

黑客和開發者都是程式員

許多程式員,甚至開發者的創意都不足以被視為是黑客

許多程式員,甚至也包括黑客,其教育程度或者經驗均不足以被看作是開發者。

理想情況下一個人當然想同時成為這三種角色,比方說足夠有創意成為一名黑客,受到的正規訓練和經驗足夠多可以設計軟體而不僅僅是破解東西。

不過即便你不是很有創意,并且 / 或者缺乏教育以及 / 或者經驗來正确開發大規模應用,你仍然應該對自己是一名程式員感到自豪。利用代碼解決問題本身就是一種超級能力。

附注:

黑客的類型很寬泛,可應用到任何領域,不僅僅是計算機。而本文主要是針對軟體類型。

“coder” 基本上等同于程式員

破解往往跟品質差相關聯,但并不總是這樣。這是因為破解通常都是大刀闊斧一想到就開幹效果最好而不是一點點的慢工出細活。在黑客也是開發者或者雖然不是開發者但還需要盯住設計和品質的情況下,事後回過頭來看看自己的創作并且解決存在問題幾乎是免不了的。

确定誰可以叫做黑客,誰不能被稱為黑客是一件認知見仁智者見智的事情。大都同意的基本規則包括 1)你得做出 1 件或以上大家覺得有用的東西,2)其他黑客覺得你是黑客。

在安全界,黑客還意味着多件事情。對于測試者來說這通常意味着這個人了解系統并且能攻克其安全控制。不過頂級安全對黑客的定義要更加純粹,比方說建立了供他人使用的安全軟體或工具的人就是黑客。

在流行文化裡面,黑客意味着計算機犯罪。在安全界此類演員往往被稱為是 “攻擊者”。

著名程式員,同時也是最早的計算機社群名人之一的 eric raymond 是這樣定義黑客的,“聰明、有創意、思想開放,享受問題解決和學習,樂意分享知識高于一切的人。”

“軟體工程師” 等同于開發者。意味着受到過有關軟體架構、設計的正規教育以及必要的預教育。

繼續閱讀