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