修煉一名程序員的職業(yè)水準(zhǔn)[4]
四、天生神力:成為系統(tǒng)分析員 本來就論述如何成為一名職業(yè)程序員而言,本文已基本完成任務(wù)了,但《菜根譚》有言:竭世機(jī)樞,似一滴投于巨壑,窮諸玄辯,若一毫置于太虛。既已乘興到此,何妨多置一毫于太虛呢,作者不才,干脆盡興寫算了。 你要是運(yùn)氣好,直接進(jìn)入了一個(gè)嚴(yán)格規(guī)范生產(chǎn)的軟件企業(yè)就業(yè),剛開始就應(yīng)該是按別人做好的軟件設(shè)計(jì)來實(shí)現(xiàn)編程,你可以有機(jī)會(huì)直接學(xué)習(xí)軟件設(shè)計(jì),當(dāng)你積累的足夠多了,能夠?qū)ζ渲械囊恍┰O(shè)計(jì)提出好的改進(jìn)建議,而且干得又快又好,就會(huì)漸漸地展露頭角,我相信你終有一天成為一名軟件設(shè)計(jì)人員(注意,不是軟件產(chǎn)品設(shè)計(jì)人員),步入系統(tǒng)分析員的行列,但這還需其它的一些條件和自我修煉。如果你在一個(gè)不規(guī)范的軟件企業(yè)工作,那也不錯(cuò),你很可能直接就有機(jī)會(huì)進(jìn)行軟件設(shè)計(jì),然后開發(fā)、測(cè)試,甚至還不得不自己定義需求,把軟件開發(fā)過程的各個(gè)環(huán)節(jié)走一個(gè)遍,當(dāng)然這樣對(duì)你的要求更高,而且你也不容易得到及時(shí)有益的指點(diǎn),在正態(tài)分布的情況下,你應(yīng)該是成長(zhǎng)的很慢。但不管就業(yè)的單位如何,如果你決心要成為頂尖軟件職業(yè)選手,通常什么客觀困難都阻擋不了你,然而你個(gè)人的因素可能會(huì)阻止你的前進(jìn)。下面提出的觀點(diǎn)純屬一己之見,傷人自尊之處作者在此提前道歉,并建議你除非對(duì)本文有強(qiáng)烈的興趣,否則就請(qǐng)直接看第五節(jié)或放下別看了。丑話已說在前頭了,在各種軟件開發(fā)組織的發(fā)展過程中的事實(shí)也證明,只有少數(shù)程序員能成為系統(tǒng)分析員,我想這一點(diǎn)不是我杜撰的吧,因此你要是在看接下來的部分時(shí)感到氣憤難當(dāng),那也實(shí)在沒著,純屬活該,因?yàn)樽髡咧皇窃谡f明自己的觀點(diǎn)而已,你最多可以呲之以鼻,表示一下你的輕蔑好了,但沒有任何理由可以罵人! 作者自己沒有到微軟面試過,但身處軟件行業(yè),關(guān)于微軟的許多東東當(dāng)然還是有耳聞的,據(jù)說微軟招聘一名程序員要過五個(gè)已經(jīng)成為微軟程序員的面試關(guān),而且是一票否決制,又據(jù)說大多數(shù)面試題并非編程,而是一些有關(guān)邏輯和智力的題,作者私下也做過許多流傳的微軟面試題,并對(duì)此做法深以為然。程序的本質(zhì)就是邏輯,所以幾十年前就有人提出編程是一門藝術(shù),而藝術(shù)是要靠天份的,這一點(diǎn)少有人反對(duì)。一個(gè)人的邏輯能力可以不斷提高,但其能到達(dá)的終極邏輯能力的層次必定為其天生智力所限制,這一點(diǎn)就讓人不易接受了。好笑啊!人們可以公開承認(rèn)自己沒有某種或全部的藝術(shù)天份,但要說自己邏輯天份不夠,換句話說承認(rèn)自己笨、IQ不夠高,往往是要怒發(fā)沖冠的,其實(shí)這又有什么區(qū)別呢?話都說到這兒了,再次建議你如果不夠自信,就跳過這一節(jié)吧,直接看第五節(jié),好嗎? 好了,把話題說回來,你已經(jīng)成為一門合格的職業(yè)程序員了,如果要想成為從事軟件系統(tǒng)設(shè)計(jì)的職業(yè)系統(tǒng)分析員,第一件事就是悄悄找一個(gè)標(biāo)準(zhǔn)智商測(cè)試的網(wǎng)站或其它渠道,嚴(yán)格認(rèn)真的測(cè)一測(cè)自己的智商,如果IQ低于130 (正常智商是110),就請(qǐng)別費(fèi)勁了,打消掉成為系統(tǒng)分析員的念頭吧!好!好!先請(qǐng)你冷靜一下,好好想想,其實(shí)微軟面試時(shí)就是在測(cè)你的智商和邏輯數(shù)學(xué)素質(zhì)呢,這就是本節(jié)的標(biāo)題為"天生神力"的原因,因?yàn)樵O(shè)計(jì)就是從無到有地進(jìn)行創(chuàng)造,無論是軟件還是其它行業(yè)都一樣,可以有借鑒的,沒有現(xiàn)成的,設(shè)計(jì)就是創(chuàng)造!如果你IQ在130以上,又決心要當(dāng)一名職業(yè)軟件系統(tǒng)分析員,其實(shí)你不過是要準(zhǔn)備好吃更大的苦而已,有什么好虛榮的呢? 修煉還是從基本功開始的,過程和成為一名職業(yè)程序員差不多。必須使用設(shè)計(jì)工具這一點(diǎn)是不用多說的。在工作中,你基本上遇到的是兩類方式的設(shè)計(jì),一個(gè)是結(jié)構(gòu)化設(shè)計(jì),另一個(gè)是面向?qū)ο笤O(shè)計(jì),就個(gè)人經(jīng)驗(yàn)而言,面向?qū)ο蟮脑O(shè)計(jì)更好。如果你工作中不得不采用結(jié)構(gòu)化的設(shè)計(jì),你必須熟練地掌握數(shù)據(jù)流圖和控制流圖的分析和設(shè)計(jì),一般來講,如果你把一個(gè)軟件中用到的數(shù)據(jù)模型設(shè)計(jì)好了,針對(duì)功能化的流程,不難設(shè)計(jì)出數(shù)據(jù)流圖,但下一步設(shè)計(jì)控制流圖才是挑戰(zhàn),如果你按照需求走不通設(shè)計(jì)好的控制流圖,那么你或別人在按照這個(gè)設(shè)計(jì)編程實(shí)現(xiàn)時(shí),必定也走不通,沒有奇跡會(huì)發(fā)生,還是在設(shè)計(jì)階段嚴(yán)格要求吧,又有一點(diǎn)需要牢記:返工是最慢的。當(dāng)你在進(jìn)行控制流圖的設(shè)計(jì)時(shí),也不要妄想得到需求人員提供給你明確的指點(diǎn),通常他們要是能夠把需求的功能和操作次序?qū)懲暾脑,你?yīng)該就感恩戴德了,從需求中整理出功能、操作的拓?fù)浯涡蚝蜅l件是你作為系統(tǒng)分析員的職責(zé)?纯矗菦]有一點(diǎn)圖論的基礎(chǔ)和拓?fù)鋵W(xué)的入門知識(shí),你是當(dāng)不好一個(gè)職業(yè)系統(tǒng)分析員的,即使你天賦不錯(cuò),必要的數(shù)學(xué)和邏輯素質(zhì)仍然不可或缺。也不用氣餒,永遠(yuǎn)沒有最好的設(shè)計(jì),只有更好的設(shè)計(jì),反復(fù)地進(jìn)行設(shè)計(jì)迭代,勇于推翻舊的設(shè)計(jì),你將快速進(jìn)步。如果你在工作中是采用面向?qū)ο筮M(jìn)行設(shè)計(jì)的,那就更有利了,有關(guān)面向?qū)ο笤O(shè)計(jì)的書太多了,不用作者在此多費(fèi)口舌,建議精讀一本經(jīng)典的.書,比如北大邵維忠等編譯的《面向?qū)ο蟮姆治觥罚行┓椒ê图记煽赡苓^時(shí),但其邏輯的基本原理是非常正確的,其本質(zhì)是,你在邏輯上是如何認(rèn)識(shí)這個(gè)世界的,你就是如何設(shè)計(jì)軟件體系結(jié)構(gòu)的,然后讀讀其它書,觸類旁通,自己創(chuàng)造機(jī)會(huì)多實(shí)踐,成功自然會(huì)到來的,總之,不管是結(jié)構(gòu)化設(shè)計(jì)還是面向?qū)ο笤O(shè)計(jì),評(píng)價(jià)一下自己的軟件系統(tǒng)設(shè)計(jì)方案吧,有好多指標(biāo)呢,比如是否均勻和平衡?局部獨(dú)立性強(qiáng)不強(qiáng)?有沒有歧異的結(jié)構(gòu)?有沒有層次太多或太少?有沒有某個(gè)層次太大、太廣?是不是邏輯結(jié)構(gòu)先復(fù)雜了再化簡(jiǎn)的?還是只會(huì)設(shè)計(jì)簡(jiǎn)單的,復(fù)雜不起來(這一點(diǎn)是笨哦,如果出現(xiàn)多次,請(qǐng)你不要意氣用事,轉(zhuǎn)行吧)?最重要的一點(diǎn),是否容易理解、實(shí)現(xiàn)和改進(jìn)?你自己會(huì)得出評(píng)價(jià)的。如果有機(jī)會(huì)看到別人的設(shè)計(jì),一定不要錯(cuò)過學(xué)習(xí)的機(jī)會(huì),自己推導(dǎo)一遍,認(rèn)真比較比較,獲益會(huì)較多。 走到這一步,你就應(yīng)該關(guān)注設(shè)計(jì)模式了,首先還是學(xué)習(xí),這方面的好書有的是,但一般在工作中用到的設(shè)計(jì)模式較為單一,應(yīng)該多嘗試一下其它的設(shè)計(jì)模式。其次必須要明白設(shè)計(jì)模式不是設(shè)計(jì)思路,也不能代替設(shè)計(jì)思路,比方你要從A到B修一條路,設(shè)計(jì)模式只是讓你選擇,是修水泥的還是柏油的?是高架路還是普通的,但線路必須你自己定,而線路就是設(shè)計(jì)思路,模式對(duì)思路是有影響,但不能代替,所以如果你的智商高達(dá)250,我相信你直接用匯編語言也能寫出面向?qū)ο蟮某绦騺。第三在此有一個(gè)陷阱,很多系統(tǒng)分析員生搬硬套設(shè)計(jì)模式,全然不懂如何融會(huì)貫通,在你的一項(xiàng)具體工作中,往往是以一種設(shè)計(jì)模式為主,其它模式為輔的,思維不拘泥于形式才是關(guān)鍵,而且也為你到達(dá)更高的軟件設(shè)計(jì)的境界做好準(zhǔn)備。 唉!都不知該怎么向下寫好了,因?yàn)橐堰_(dá)到作者水平的極限了,我胡亂說一點(diǎn),你湊合看吧。軟件設(shè)計(jì)最終的層次是:以無法為有法、以無限為有限,這句話是李小龍說的,不是我說的。再拾人牙慧一把,類比一個(gè)故事吧,金大俠在《倚天屠龍記》里講到張無忌初學(xué)太極,學(xué)會(huì)的標(biāo)志是把剛學(xué)的招數(shù)全忘了,記住的是太極的道理和精神,和李小龍有些相似喔,軟件設(shè)計(jì)也一樣,忘記所有的設(shè)計(jì)模式,隨心所欲進(jìn)行設(shè)計(jì)才是至高境界,所以你能到達(dá)多高的軟件設(shè)計(jì)的境界最終將取決于你的哲學(xué)素質(zhì),這一點(diǎn)實(shí)在是不好寫啊,你自己領(lǐng)悟吧!作者只有祝福了!
五、職業(yè)人的終極目標(biāo):全面修煉,成為L(zhǎng)eader 這一節(jié)更不好寫,涉及到太多其它非技術(shù)方面的因素,特別是個(gè)人人生觀和世界觀的修煉,如果本帖的點(diǎn)擊率超過作者私下期望的一個(gè)數(shù)值,那我就爭(zhēng)取盡力厚著臉皮再補(bǔ)上吧。我只說一句,雖然大家都知道軟件開發(fā)是一個(gè)團(tuán)隊(duì)性的工作,但追求參與一個(gè)大型軟件系統(tǒng)的成功開發(fā),是一名軟件人員的本能,就像拿破侖說的不想當(dāng)元帥的士兵不是好士兵,所以不追求實(shí)現(xiàn)大系統(tǒng)的軟件人員,也不是一個(gè)好的職業(yè)軟件人員,但你只有成為L(zhǎng)eader,領(lǐng)導(dǎo)一個(gè)優(yōu)秀的軟件開發(fā)團(tuán)隊(duì),才有機(jī)會(huì)實(shí)現(xiàn)這個(gè)終極職業(yè)目標(biāo),對(duì)不對(duì)? 好吧,不管你現(xiàn)在的感受如何,我都謝謝你能讀到這里!我不習(xí)慣假歉虛,就不說什么作者水平有限,本文拋磚引玉,歡迎大家批評(píng)斧正之類的客套話了,雖然作者水平確實(shí)有限。所以我認(rèn)為你盡管有權(quán)砸磚,但實(shí)在沒必要搞回帖、或回罵、或頂之類的玩意兒,我只是盡興寫一點(diǎn)多年從事軟件開發(fā)工作的體驗(yàn),因此接下來我就高掛免戰(zhàn)牌,不回復(fù)任何回帖了。再次謝謝你能有耐心讀到這里!希望本文對(duì)你有所裨益,祝你成功!再見!
【修煉一名程序員的職業(yè)水準(zhǔn)[4]】相關(guān)文章:
職業(yè)道德修煉08-21
職業(yè)心態(tài)的修煉與提升10-06
職業(yè)人的植物修煉法則11-21
職業(yè)經(jīng)理人的修煉職業(yè)化的心態(tài)09-08
職業(yè)經(jīng)理人的十二項(xiàng)修煉11-11