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