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