[轉載]好的程式設計師做不出好的軟體設計
轉者前言:之所以將這篇文章轉到社群裡,是因為這篇文章中涉及到那天幾個人在群裡討論語言影響思維方式這一話題。
你不能看到一個程式設計師還不錯,就把他推到系統分析師、軟體設計師或軟體架構師的位置上。
如果你在團隊或公司裡尋找一個能勝任軟體架構師或設計師這樣重要位置的人時,首先出現在腦子裡的想法通常是在程式設計師中選一個最好的。別這麼幹。這樣的位置不是隨意的找個不錯的程式設計師就能勝任的。把你最資深的程式設計師晉升到這個位置也未必就合適。
乍一聽你可能感覺荒誕。為什麼我不能讓一個程式設計師去做系統設計呢?畢竟,他們是設計程式的,不是嗎?的確是的,沒錯。但你要明白的事情是,設計軟體相對於編寫程式,它需要的是一套完全不同的技能。
讓我們來看看為什麼一個好的程式設計師就未必可以做一個好的軟體設計師。但首先,讓我們來問問自己一個問題,是什麼讓一個程式設計師變的優秀,甚至傑出?要想成為一個好的程式設計師,你需要有能力實現真實世界裡重要的軟體。只能夠寫出一個簡單的文字編輯器是遠遠不夠的。
為了能做到可以解決重大的、複雜的程式設計問題,一個程式設計師需要在某個特點的程式語言上進行數年的經驗積累。也就是說,為了能熟練的使用這種語言、熟悉這種語言的各種特色,他必須專注於這種語言。問題就在這兒。
對於只有錘子的人,他能解決的問題就是釘釘子
如果你專注於一種語言,並能做到精通掌握,那你遇到的問題模式很可能就限制於跟這種語言相關的領域。簡言之,如果你懂PHP,那所有的問題都基本上是跟Web開發相關。相同的道理,如果你全部的知識都集中的Java上,那你對所有問題的解決思路都會沿著物件導向的方向,即使是使用程式式程式設計對於解決你的問題會更優的情況下,你也會如此。
一個程式設計師,只懂得一、兩種程式語言,這會嚴重的限制他的解決問題的能力。例如,如果你的程式語言是C語言,對於手頭出現的問題,你絕對不可能想出一種物件導向的解決思路,因為你的程式語言不提供這樣的語言特徵。跟Haskell程式設計師不一樣,C++程式設計師不可能想出函式式解決方案。你的程式語言裡提供了結構體和列舉型別與否,會嚴重的影響你剖析一個問題的方式。如果你使用的語言的能力很弱,或你只知道少數幾種語言,你解決問題的能力相應的會被削弱。
語言塑造了我們的思維方式
有人說,我們的語言塑造了我們的思考和認知這個世界的方式。我基本上認同這個觀點。當一個人的母語裡的名詞都有性別之分時,他一定不會同說其它種母語的人那樣一提起“警察”這個詞就基本上認為是男的。當一個人的母語裡對藍色和綠色不區分時,他對世界的感知會和那些有區分的人的感知大不一樣。
如果我們回首中世紀學校的三學科,它們被描述為:語法解決概念和物件如何在書寫和話語中被表現,用邏輯對它們進行分析,最終以修辭為目的同他人交流。對於我們來說,程式語言也有語法。如果我們的程式語言不夠強,我們對事物和概念的認識以及對如何表達它們都不會有完整的視野。
語言,我們用來跟人們、跟計算機交流的功能,明顯的影響著我們的思考方式。我們對語言知道的越豐富、越多,越能幫助我們提高解決問題的能力。
那麼,什麼樣的人更合適?
那麼,一個在某一兩種程式語言裡具有專長的程式設計師,在當他解決一個問題時,會存在一定的侷限。他會侷限於他使用的語言允許他做的事。因此,他不會成為一個好的軟體設計師或分析師。
如果我們不用這些優秀的程式設計師,誰又能擔當軟體設計的任務呢?當然不會是那些完全不懂程式設計的人了。我們需要的是一種通才。一個優秀的軟體設計者必須通曉過程式,物件導向式,函式式,以及邏輯式程式語言—還包括各種優秀的軟體開發方法論。他不能只熟悉一種方法模式、像一個專業領域人員那樣。當然,他自己並不能寫出複雜的程式,因為他的知識太寬泛。儘管如此,他卻能正確的判斷出怎麼樣的設計才是一個正確的解決方案。如果問題是處理一個釘子,他會找來一個熟練使用錘子的人;如果問題是處理一個巨石,他會叫來爆破部隊,而不是讓你徒勞的用錘子白費力氣。
原文地址:http://www.aqee.net/good-programmers-make-bad-designers/comment-page-1/#comment-2511
相關文章
- 不會填坑的程式設計師不是一個好程式設計師!程式設計師
- 程式設計師如何寫出好程式碼?程式設計師
- 好程式設計師不寫程式碼程式設計師
- 好程式設計師:Java程式設計師面試秘籍程式設計師Java面試
- 做個清醒的程式設計師之要不要做程式設計師程式設計師
- 程式設計師常見軟體下載連結程式設計師
- 程式設計師寫的跳轉程式設計師
- 不會效能測試的後端,不是好程式設計師後端程式設計師
- 幽默:程式設計師與軟體工程師的區別程式設計師軟體工程工程師
- 程式設計師被懟!HR:對不起,我們不招“精通Excel”的程式設計師程式設計師Excel
- 以前的程式設計師,現在的程式設計師程式設計師
- 程式設計師嘛,先做個好架構師再說程式設計師架構
- 軟體設計師:程式設計語言基礎知識程式設計
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java
- 最適合程式設計師的筆記軟體程式設計師筆記
- 好與壞的程式設計師:如何評價程式設計師的水平才算客觀?程式設計師
- 中國的頂級軟體程式設計工程師和歐美的頂級軟體程式設計工程師差距有多大?程式設計工程師
- 程式設計師的10個好習慣程式設計師
- 軟體設計師:UML
- 程式設計師到底要不要轉行軟體測試?程式設計師
- 來自程式設計師的福利!用Python做一款翻譯軟體程式設計師Python
- 玩轉flutter create命令,做10倍程式設計師Flutter程式設計師
- 關於要不要轉行做程式設計師的建議程式設計師
- 在國企做程式設計師是怎樣的體驗?程式設計師
- 程式設計師的美麗假期(並不)程式設計師
- 好程式設計師雲端計算學習路線分享軟體包管理程式設計師
- 程式設計師,如何從開發轉型做架構師?程式設計師架構
- 好程式設計師Java實用教程系列之物件的轉型程式設計師Java物件
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 程式設計師35歲不焦慮,該怎麼做?程式設計師
- 10個程式設計好習慣:優秀程式設計師的經驗分享程式設計師
- 美女程式設計師觀點:程式設計師最重要的非程式設計技巧程式設計師
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Java培訓Java程式設計師必學技術程式設計師Java
- 好程式設計師Python培訓分享Python程式設計師面試技巧程式設計師Python面試
- 做一個心理健康的程式設計師程式設計師
- 好程式設計師Java教程分享Java之設計模式程式設計師Java設計模式
- 好程式設計師分享JavaScript建立物件的方式!程式設計師JavaScript物件
- VUE的面試題分享-好程式設計師Vue面試題程式設計師