你不能看到一個(gè)程序員還不錯(cuò),就把他推到系統(tǒng)分析師、軟件設(shè)計(jì)師或軟件架構(gòu)師的位置上。如果你在團(tuán)隊(duì)或公司里尋找一個(gè)能勝任軟件架構(gòu)師或設(shè)計(jì)師這樣重要位置的人時(shí),首先出現(xiàn)在腦子里的想法通常是在程序員中選一個(gè)最好的。別這么干。這樣的位置不是隨意的找個(gè)不錯(cuò)的程序員就能勝任的。把你最資深的程序員晉升到這個(gè)位置也未必就合適。乍一聽你可能感覺荒誕。為什么我不能讓一個(gè)程序員去做系統(tǒng)設(shè)計(jì)呢?畢竟,他們是設(shè)計(jì)程序的,不是嗎?的確是的,沒錯(cuò)。但你要明白的事情是,設(shè)計(jì)軟件相對(duì)于編寫程序,它需要的是一套完全不同的技能。 讓我們來看看為什么一個(gè)好的程序員就未必可以做一個(gè)好的軟件設(shè)計(jì)師。但首先,讓我們來問問自己一個(gè)問題,是什么讓一個(gè)程序員變的優(yōu)秀,甚至杰出?要想成為一個(gè)好的程序員,你需要有能力實(shí)現(xiàn)真實(shí)世界里重要的軟件。只能夠?qū)懗鲆粋(gè)簡(jiǎn)單的文本編輯器是遠(yuǎn)遠(yuǎn)不夠的。 為了能做到可以解決重大的、復(fù)雜的編程問題,一個(gè)程序員需要在某個(gè)特點(diǎn)的編程語言上進(jìn)行數(shù)年的經(jīng)驗(yàn)積累。也就是說,為了能熟練的使用這種語言、熟悉這種語言的各種特色,他必須專注于這種語言。問題就在這兒。 對(duì)于只有錘子的人,他能解決的問題就是釘釘子 如果你專注于一種語言,并能做到精通掌握,那你遇到的問題模式很可能就限制于跟這種語言相關(guān)的領(lǐng)域。簡(jiǎn)言之,如果你懂PHP,那所有的問題都基本上是跟Web開發(fā)相關(guān)。相同的道理,如果你全部的知識(shí)都集中的Java上,那你對(duì)所有問題的解決思路都會(huì)沿著面向?qū)ο蟮姆较颍词故鞘褂眠^程式編程對(duì)于解決你的問題會(huì)更優(yōu)的情況下,你也會(huì)如此。 一個(gè)程序員,只懂得一、兩種編程語言,這會(huì)嚴(yán)重的限制他的解決問題的能力。例如,如果你的編程語言是C語言,對(duì)于手頭出現(xiàn)的問題,你絕對(duì)不可能想出一種面向?qū)ο蟮慕鉀Q思路,因?yàn)槟愕木幊陶Z言不提供這樣的語言特征。跟Haskell程序員不一樣,C++程序員不可能想出函數(shù)式解決方案。你的編程語言里提供了結(jié)構(gòu)體和枚舉類型與否,會(huì)嚴(yán)重的影響你剖析一個(gè)問題的方式。如果你使用的語言的能力很弱,或你只知道少數(shù)幾種語言,你解決問題的能力相應(yīng)的會(huì)被削弱。 語言塑造了我們的思維方式 有人說,我們的語言塑造了我們的思考和認(rèn)知這個(gè)世界的方式。我基本上認(rèn)同這個(gè)觀點(diǎn)。當(dāng)一個(gè)人的母語里的名詞都有性別之分時(shí),他一定不會(huì)同說其它種母語的人那樣一提起“警察”這個(gè)詞就基本上認(rèn)為是男的。當(dāng)一個(gè)人的母語里對(duì)藍(lán)色和綠色不區(qū)分時(shí),他對(duì)世界的感知會(huì)和那些有區(qū)分的人的感知大不一樣。 如果我們回首中世紀(jì)學(xué)校的三學(xué)科,它們被描述為:語法解決概念和對(duì)象如何在書寫和話語中被表現(xiàn),用邏輯對(duì)它們進(jìn)行分析,最終以修辭為目的同他人交流。對(duì)于我們來說,編程語言也有語法。如果我們的編程語言不夠強(qiáng),我們對(duì)事物和概念的認(rèn)識(shí)以及對(duì)如何表達(dá)它們都不會(huì)有完整的視野。 語言,我們用來跟人們、跟計(jì)算機(jī)交流的功能,明顯的影響著我們的思考方式。我們對(duì)語言知道的越豐富、越多,越能幫助我們提高解決問題的能力。 那么,什么樣的人更合適? 那么,一個(gè)在某一兩種編程語言里具有專長的程序員,在當(dāng)他解決一個(gè)問題時(shí),會(huì)存在一定的局限。他會(huì)局限于他使用的語言允許他做的事。因此,他不會(huì)成為一個(gè)好的軟件設(shè)計(jì)師或分析師。 如果我們不用這些優(yōu)秀的程序員,誰又能擔(dān)當(dāng)軟件設(shè)計(jì)的任務(wù)呢?當(dāng)然不會(huì)是那些完全不懂編程的人了。我們需要的是一種通才。一個(gè)優(yōu)秀的軟件設(shè)計(jì)者必須通曉過程式,面向?qū)ο笫剑瘮?shù)式,以及邏輯式編程語言—還包括各種優(yōu)秀的軟件開發(fā)方法論。他不能只熟悉一種方法模式、像一個(gè)專業(yè)領(lǐng)域人員那樣。當(dāng)然,他自己并不能寫出復(fù)雜的程序,因?yàn)樗闹R(shí)太寬泛。盡管如此,他卻能正確的判斷出怎么樣的設(shè)計(jì)才是一個(gè)正確的解決方案。如果問題是處理一個(gè)釘子,他會(huì)找來一個(gè)熟練使用錘子的人;如果問題是處理一個(gè)巨石,他會(huì)叫來爆破部隊(duì),而不是讓你徒勞的用錘子白費(fèi)力氣。 來源:博客園 |