第一篇:做程序員的劣勢
第一,嚴重青春飯
看看華為淘汰34以上員工就知道了。
第二,社交圈很難往上走 所有人都追著醫(yī)生交朋友,手握現(xiàn)金的百姓會追著金融人交朋友,你就是做個婚慶,裝修,修車,警察,哪怕開個小飯館都會有人托你辦事。CS除了修電腦別的技能對行外人幾乎沒有用。碼農(nóng)想積累人脈幾乎沒戲。
第三,連續(xù)不離散的無意義學習從入行到今天,我已經(jīng)學習過不下8門語言,三四種數(shù)據(jù)庫,讀過無數(shù)庫的源碼。而且我這些積累絕對可以通過任何對口公司面試。但是,這種積累隨著技術(shù)更新?lián)Q代,完全沒有意義。我這十來年來的技術(shù)經(jīng)驗積累的努力放在任何一個其他行業(yè)都夠成為技術(shù)專家了,但是CS因為技術(shù)更新毫無意義。
第四,上升通道受限于運氣
如果你做建筑工程,那你從萬達跳槽到華遠,你的經(jīng)驗直接可以應(yīng)用,但是計算機不行,你在微軟用微軟的底層庫,即使你能默寫C#底層全部實現(xiàn),你到intel,龜殼字,18摸一樣是一個小白,我前同事從諾基亞過來,做塞班的專家,過來諾西一樣是開發(fā),我還得教他風河的API,另一個前同事都已經(jīng)快從組長升經(jīng)理了,跳去intel一樣底層開發(fā)小兵。甚至諾西內(nèi)部的數(shù)通架構(gòu)師因為部門縮減去fdd做測試??梢哉fCS絕大多數(shù)人沒機會做一個項目從碼農(nóng)一直做到總監(jiān)。一個碼農(nóng)能否晉升靠的主要是運氣。
第五,上升通道受限于不具備的能力
碼農(nóng)最不具備的能力就是PPT吹牛逼拍馬屁搞關(guān)系。我敢肯定所有大公司都如此,小公司不甚了解。不過創(chuàng)業(yè)公司是賭博,不好亂講。大公司能升上去的都是會玩人際的人。我在過的幾家大公司總監(jiān),研發(fā)總監(jiān),不是PM就是測試出身,或者職業(yè)經(jīng)理人。研發(fā)第一遠離業(yè)務(wù),第二缺乏人際公關(guān)能力,絕大多數(shù)做到基層經(jīng)理就止步了。經(jīng)理上不去,碼農(nóng)也就上不去。只能走架構(gòu)師和技術(shù)專家路線。但是參見上一條,一個公司的架構(gòu)師和技術(shù)專家到另一家公司幾乎和小白無異。第六,工作時間過度占據(jù)生活時間
我從業(yè)十來年幾乎日日10小時++。失去的時間是你一生中最寶貴的財富,其他人可以用這個時間做很多事情,家庭,三產(chǎn),人脈積累,運動健身,旅游娛樂。而碼農(nóng)不行。
第七,智力付出和收入嚴重不成正比 行外人一定會反駁,可惜事實的確如此。一個動態(tài)規(guī)劃可以拯救企業(yè)管理中一跳產(chǎn)品線為企業(yè)節(jié)約巨大成本或創(chuàng)造巨大收益。但是放在計算機行業(yè),不過是節(jié)省一臺虛機的一部分運算量,節(jié)省成本至多不到萬元。解一個中高度復雜bug中的彎彎繞繞所花費的智力成本放在扔個一個行業(yè)都足夠一個月的業(yè)績,但是計算機行業(yè)卻不過是一兩天的績效考核。
第八,可替代性強
這點關(guān)聯(lián)前述一三四。首先,碼農(nóng)工作的本質(zhì)更多的是學習一門語言,然后應(yīng)用這門語言對公司一個具體業(yè)務(wù)實現(xiàn)科學家的想法。計算機行業(yè)科學研究好玩,數(shù)學好玩,算法好玩。但是多數(shù)人是碼農(nóng)而非科學家,數(shù)學家,算法研究員。碼農(nóng)就是實現(xiàn)業(yè)務(wù)代碼。這就導致了工作極容易上手進而可替代性高。即使是高級語言中最繁瑣的C++從0到能略有瑕疵的完成基本工作一年學習足以。更何況python, JS, java, php這些極易上手的語言現(xiàn)在已經(jīng)能完成很多,絕大多數(shù)工作了。剩下的就是熟悉業(yè)務(wù)。而熟悉業(yè)務(wù)對于十年工作經(jīng)驗和一年工作經(jīng)驗者時間差值最多不超過半年。這就導致了可替代性隨著年齡增長并無法出現(xiàn)線性提高??梢哉f計算機行業(yè)可替代性與年齡經(jīng)驗是對數(shù)曲線。而多數(shù)行業(yè)也是線性甚至有些行業(yè)是指數(shù)。
這些現(xiàn)象都是事實,但是并不構(gòu)成不做程序員的理由
一 金字塔結(jié)構(gòu)
無論如何提倡平等、自由。社會一定是一個金字塔結(jié)構(gòu),古今如此、中外如此,行業(yè)如此。金融行業(yè)的錢多吧,2016平準薪酬達到30W,但如果你是銀行的小柜員,你拿得到30W?金融是一個頂部高度聚集的行業(yè),大佬拿大頭,柜員嘛,呵呵。
任何行業(yè),頂部肯定是1/10的人,做金融也好、警察也好、醫(yī)生也罷。你做警察,你能說你35歲能干到總監(jiān)?剩下9/10必定是小兵、被統(tǒng)治者、碼農(nóng)。二 萬精油
計算機實際上是一個萬精油行業(yè),什么行業(yè)都能干,金融需要、電商需要、房地產(chǎn)也需要。
但業(yè)務(wù)才是公司核心:房地產(chǎn)考慮如何賣房、教育考慮如何招生、電商考慮如何成交… 程序員?保證系統(tǒng)好用、穩(wěn)定就好,萬一你受不了996辭職,拉一個人年輕精壯的人來照樣干。
因此,單單代碼好并無卵用,你人際關(guān)系不好,活一般,NB不會吹,PPT不會做,那你價值何在?你能默寫C#底層庫的全部代碼,動態(tài)規(guī)劃信手拈來,精通8門語言,4個數(shù)據(jù)庫,然而公司并不需要,又有何用?
JD上經(jīng)常看到的“我們是一個技術(shù)驅(qū)動型公司…”千萬別信:國人懂技術(shù)驅(qū)動?有技術(shù)驅(qū)動?外賣火就全做外賣、單車火就全做單車,屁股決定腦袋,流氓引導無良中產(chǎn)。騙騙碼農(nóng)而已,別當真。
三 關(guān)鍵靠人品
技能撐死只占成功因素的30%。Facebook的代碼也就是培訓班水平,微軟第一版操作系統(tǒng)直接是向別人買的,就連Google也是后來招人重新寫。
但扎克伯格身為猶太人的文化傳承、從10歲開始做項目帶來的素養(yǎng)、哈佛大學的優(yōu)質(zhì)人才帶來的產(chǎn)品戰(zhàn)略,這才是關(guān)鍵。技術(shù)從來不是主導,你的眼界、思考、產(chǎn)品能力、發(fā)現(xiàn)機會的能力,才是決定你能否發(fā)展的主要因素。
你的行業(yè)怎么樣?細分領(lǐng)域如何?公司前景如何?你是什么位置?比如你做互聯(lián)網(wǎng)職業(yè)教育,你知道教育市場如何細分么?你知道公司所處的賽道么?你知道國外公司的幾種玩法么?你知道幾種教學法?你又知道幾種學習模式? 萬物本是一體,編程區(qū)區(qū)小技,何足為道。
第二篇:如何給程序員做績效考核
如何給程序員做績效考核
績效考核的五種死因
程序員作為企業(yè)開發(fā)力量的最核心資產(chǎn),無疑得到公司從上至下的一致關(guān)注。開發(fā)是個智力密集型產(chǎn)業(yè),程序開發(fā)的特點是,付出相同時間的情況下,兩個開發(fā)者之間的產(chǎn)能會相差十幾甚至幾十倍。軟件開發(fā)人員向來以?不容易考核、工作不容易被量化?而著稱。本期,我們重點分析程序員考核的?死因?及對策。
典型的程序員考核的產(chǎn)生
分析考核死因之前,我們先看下它是如何出生的。某天,公司老板突然想到一件事——我不懂研發(fā),而研發(fā)對我公司這么重要,怎么辦?念一及此,老板不禁有些緊張,馬上叫來HR開會,安排本月人力資源部分的工作重點,那就是?研發(fā)人員考核?,務(wù)必貫徹到位、立即執(zhí)行。深諳老板意圖的HR,回到工位后立刻上網(wǎng)買書,從如何考核、KPI實務(wù)到平穩(wěn)計分卡策略一應(yīng)俱全,書到手之后連夜?抄書?趕制考核體系,整理出?研發(fā)人員考核方法?。第二天,HR把此考核方法交給研發(fā)總監(jiān)并告知?老板要考核你們,這是考核辦法。具體指標和KPI請部門自己制定,本周末之前報給人力資源部。我們會匯報給總裁?。研發(fā)總監(jiān)拿著連夜撰寫制度的人都沒明白的?辦法?找到項目經(jīng)理:?老板要考核我們,這是考核辦法。你們團隊成員的具體指標和KPI你自己定,明天下班之前匯總給我。?項目經(jīng)理找到了程序員:?老板要考核你,這是考核辦法。你自己的指標和KPI你自己定,今天中午之前給我。?程序員迷惑地問:?目標不是公司制定的嗎??
很多考核就這么荒唐的開始了……
很快考核變成了每月項目經(jīng)理給組里的程序員打分。
于是,老板很滿意:?我終于可以放松了,以后我們靠考核制度管理研發(fā)人員。我們從此擺脫了‘人治’時代!?
HR也很滿意:?我不用明白研發(fā)是什么,更不必了解程序。我只要他們知道,我可以扣他們的錢就行了,還是用他們自己制定的指標!?
其他人都不太滿意……
不久之后,公司就會發(fā)生程序員離職率升高的現(xiàn)象。被考核者,諸如:程序員、項目經(jīng)理、研發(fā)總監(jiān)都走光之后,考核就這么死了!
接下來,談?wù)劤绦騿T考核的五種死因及對策。
死因一:考核只以事件為核心
公司沒有利潤就不能生存,研發(fā)項目的進度很多時候決定著公司的利潤。所以很多考核是把項目無限拆分到程序員層面,這樣的考核只以事件為中心,關(guān)注事件是否做成,而不關(guān)注人和人的發(fā)展。只以事為中心的考核把程序員當成了生產(chǎn)線上的機器,有投入(高工資)就要有產(chǎn)出(高質(zhì)量的代碼),程序員被當成了標準件,即沒必要有太多成長(因為做的都是相對重復的工作),也不能時常發(fā)生故障(經(jīng)常加班也不能請假)。
有些程序員自號?IT民工?與這種考核體系的存在有很大關(guān)系。
這種考核體系可以維持短期內(nèi)的高效率,長期執(zhí)行會導致整個系統(tǒng)的崩潰。很多公司人員不斷更替,根本無穩(wěn)定可言,一部分原因是執(zhí)行了或者實質(zhì)上執(zhí)行了只以事件為核心的考核。
專家支招:
張大志:承認程序員也是人,尊重人的個性是考核的基礎(chǔ)。注重培訓,在項目壓力大時側(cè)重結(jié)果,在有 Buffer的情況下關(guān)注程序員技能的提高和個人的發(fā)展是解決此類似問題的核心方法。在項目周期的不同階段對考核方法進行調(diào)整的復合式考核方式,更能讓企業(yè)向目標前進,也能保持程序員的熱情。
胡爭輝:換個角度從結(jié)果考慮,舉一個最常見的例子,四個人合作種樹,A挖坑,B種樹,C填土,D澆水。如果考核只以事件為核心的話,那么當B沒有種樹時,C依舊填土,D依舊澆水。從考核來說A、C、D三個人都得了滿分,就算B得了0分,平均分也該有 75%,超過60%及格線了,但是種樹這個任務(wù)卻沒有完成。所以對于只以事件為核心的考核來說,不僅讓程序員感覺不到團隊的存在,而且程序員也不會為團隊考慮。在這種情況下,考核就要調(diào)整為既包含個人要完成的事件,也要體現(xiàn)個人對團隊全局的理解。
死因二:考核標準的一相情愿
第二個導致考核死亡的原因是:相關(guān)方法的制定、標準的出臺都只以公司角度為惟一視角,一切服從項目需要、服從公司需要,絕少考核其它因素。所有考核指標都由公司來定,不讓程序員參與意見。我就見過這樣的開發(fā)計劃:項目組成員工作12小時兩班倒,7×24小時、持續(xù)長達3個月、沒有Buffer。按這樣的項目計劃考核,除了能直接導致人員流失之外,沒有其它功用。
很多程序員是在被扣工資之后才被相關(guān)人員告知自己的考核指標,之前根本沒有人通知??己藭r閉門造車的情況并不少見。
專家支招:
張大志:加強溝通,讓程序員在考核開始之前了解自己的指標,是惟一克服此種死法的工具。公司怕與程序員就考核指標進行后,指標有貫徹不下去的風險。但考核失敗的代價要遠遠大于對考核指標進行合理修改的代價。程序員如果離職,那很多事情都要重新來過。
胡爭輝:在制訂考核指標時,要始終貫穿考核的杠桿作用,也就是通過給員工制訂影響切身利益的考核指標,讓員工重視這些考核點,進而推動項目的完成,保障公司的利益。既然考核起到用小利益推動大利益這樣一個杠桿作用,那么就不僅要讓員工理解考核的指標,更要讓員工在開始工作之前就要對能不能完成考核指標給出反饋。
死因三:考核制度的不合理性
很多考核刻板而沒有彈性,讓人感覺只是為了扣工資而制定的。常能考到程序員通宵加班,第二天凌晨離開公司回家睡覺,中午到公司繼續(xù)工作。發(fā)工資的時候發(fā)現(xiàn),扣了半天的錢,因為有半天不在公司。程序員會想:?那我通宵也沒給加班費?。√还搅?!?
考核制度沒有彈性只能傷害程序員的積極性。
專家支招:
張大志:如同公司市場政策僵化會導致公司的失敗,考核制度的僵化會導致制度本身的名存實亡。永遠記住我們考核的是人而非機會,保持適當?shù)膹椥浴?/p>
胡爭輝:考核制度不僅有引導員工完成公司既定目標的職能,而且還有體現(xiàn)企業(yè)文化的職能,在企業(yè)文化中對一件事情只有一種觀念,而不會有互相沖突的兩種觀念。例如,提倡加班的公司就不會提倡按時上下班,反之亦然。但是企業(yè)文化中也不會在提倡一個觀念的同時,明確的反對另一個觀念。比如說公司提倡按時上下班的時候,不會明確反對加班。所以考核制度難免和企業(yè)文化有沖突,這種情況在公司的HR新上任的時候尤為突出,因此HR在上任伊始,不僅要學習企業(yè)文化中提倡的觀念,也要理解企業(yè)文化沒有明確反對的那些觀念,進而通過考核制度體現(xiàn)出來,讓考核制度成為落實企業(yè)文化的有力工具。
死因四:考核制度的虛無性
國人常講?王子犯法與庶民同罪?,但程序員考核面前的大多數(shù)情況下卻很難做到人人平等。評分者看好的,往往考核松些;無門無派的考核相對客觀,與評分者關(guān)系緊張的一般都是最低分。意思很明,就是為了擠兌你走呢??己擞谑浅闪苏味窢幍墓ぞ撸闪舜驂寒惣旱氖侄?。
專家支招:
張大志:有效設(shè)立方監(jiān)督機制、360度考評、輪換考評者是解決以上問題,避免考核成為斗爭工具的方法。也許有人的地方就有斗爭,但是程序員考核仍然應(yīng)以客觀、公正為標準。
胡爭輝:為了避免考核的主觀和隨意,應(yīng)當建立自評分與考評分相結(jié)合的制度,不僅要由考評者打分,也要由被考核的員工自己打分,對于這兩個打分有顯著差異的時候建立復審制度,由更高級的管理人員對考評結(jié)果組織仲裁,仲裁小組應(yīng)當包括高級管理人員、HR以及在考核周期內(nèi)與被考核的員工有工作關(guān)聯(lián)的其他員工組成,通過這樣的流程不僅可以避免考核的主觀和隨意,還可以借此改進考核制度。
死因五:考核中HR常勝不敗
考核要有監(jiān)督機制,但并不需要一個婆婆式的人物在背后指手劃腳。很多程序員考核中HR都充當著這類不光彩的角色。不了解研發(fā)的HR制定出來的考核制度,可行性必然不高。與此同時,一旦有程序員因為不滿考核而離職,HR會馬上拋出自己的理論:?此程序員不適合我們的企業(yè)文化,他還不擅長溝通。?即使走的是項目骨干,HR還是拿出這套說詞,很讓人汗顏。
一個非理性的群體里很難容下理性的程序員,離開可能是最好的方法。
專家支招:
張大志:開放的心態(tài)是做好HR的前提,考核的時候人力資源部的同事不應(yīng)該把自己當神,這里不需要神,而應(yīng)該把自己的角色定位于用心理解程序員的朋友。
胡爭輝:作為一個完善的考核制度而言,不僅應(yīng)當由HR部門組織對員工的考核,也應(yīng)當有對HR部門的?考核制度?。這種考核應(yīng)當以員工滿意度為指標。比如說一項考核指標遭遇大部分員工表示不滿的時候,就需要對此進行調(diào)整。不合理的考核如果長期得不到改善,會有越來越多的員工抱著?法不責眾?的心理對待這項考核,長期以往,還會影響到考核制度的嚴肅性。
第三篇:做程序員有前途
做程序員有前途
來源: 孫允的日志
做程序員有前途
(一)你適合當程序員嗎,你知道編程序是怎么回事嗎?
1、程序員意味著要編程序。(如果你僅僅想得到一份高薪水的工作,喝喝咖啡就等老板發(fā)薪水,我奉勸你還是另找一份更合適的工作,譬如練攤,真的,兄弟,這份工作不適合你)
2、你是學文的還是學理的,編程序也許需要浪漫,但更需要邏輯和嚴謹。(說坦白點就是,在你沒有找到樂趣以前,它很枯燥)
3、你有對新技術(shù)追求的熱情嗎?你有刨根問底的探索精神嗎?(熱情絕對是最重要的!你仔細思考一下自己的性格適合當程序員嗎?)
4、當程序員決不是什么好差事,時刻需要學習,需要思考。(直到你成為那個可以引導別人去學習和思考的人,你才可以偷偷的嘿嘿笑,又一群傻蛋)
5、程序員的未來很迷茫。(但我認為關(guān)鍵看你自己!我希望你是一個有追求的人,不僅僅是混碗飯吃。因為真正的樂趣在于創(chuàng)造;如果你能改變軟件業(yè)的歷史,那?*怯⑿郟徊幌氤晌狟ill Gates,不想成為Dennis Ritchie和BjarneStroustrup,我會說你沒有追求。有個關(guān)于程序員未來的笑話,也許你還沒聽過,你該聽一聽,摘抄如下:一個程序員對自己的蠢春苊悅?,又o僑ノ噬系邸? “萬能的上帝呀,請你告訴我,我的未來會怎樣?” 上帝說“我的孩子,你去問Lippman,他現(xiàn)在領(lǐng)導的程序員的隊伍可能是地球上最大的” 于是他去問Lippman。Lippman說“程序員的未來就是駕馭程序員” 這個程序員對這個未來不滿意,于是他又去問上帝?!叭f能的上帝呀,請你告訴我,我的未來會怎樣?” 上帝說“我的孩子,你去問Gates,他現(xiàn)在所擁有的財產(chǎn)可能是地球上最多的” 于是他去問Gates。Gates說“程序員的未來就是榨取程序員” 這個程序員對這個未來不滿意,于是他又去問上帝?!叭f能的上帝呀,請你告訴我,我的未來會怎樣?” 上帝說“我的孩子,你去問侯捷,他寫的計算機書的讀者可能是地球上最多的” 于是他去問侯捷。侯捷說“程序員的未來就是誘惑程序員” 這個程序員對這個未來不滿意,于是他又去問上帝。“萬能的上帝呀,請你告訴我,我的未來會怎樣?” 上帝搖搖頭“唉,我的孩子,你還是別當程序員了”)
6、當程序員還是很有樂趣的。(當你學到新知識時,當你有新的思想見解時,當你有新的產(chǎn)品問世時,和知己探討你的成果時…我問你,覺得這些是樂趣嗎?)
7、當程序員不易也不難。(世間事有難易乎?為之…;不為…。你有決心和信心嗎?)
8、你真的要當程序員?是你自己的想法?
9、你舍得花錢買書嗎?(讀好書絕對是學習編程的最佳捷徑。你一定會說,現(xiàn)在電腦書籍真T.M.D貴,沒法子,誰讓知識和技術(shù)在人家的腦袋,在人家的書里呢;等你寫書時可以把價格定低一點,記著還有好多沒錢但想買書的兄弟很困難呀。要舍得買書,買好書,不好的的書不如不讀,其害大于其益,關(guān)于買什么書,你可以問高手或看候捷的書評;準備一個小本子記錄你想買的書的名字,逛書店時看看,如果好就買下,記住要讀,別光買不看。)
10、我告訴你,程序就是:任何有目的的、預想好的動作序列,它是一種軟件。
11、編程序就是編寫程序。
12、你想好了嗎?(如果你想好了還是決定要當程序員,可以繼續(xù)往下讀;否則,你可以繼續(xù)尋找別的出路了。)
(二)一個程序員應(yīng)該具備的基礎(chǔ)知識和概念
1、計算機是有什么組成的,CPU是什么東西,其工作原理是什么。(對于這些以及下面將要提到的概念我不會告訴你什么答案,你可以看相應(yīng)的教材,關(guān)于教材我會在下一部分詳述,記住理解最重要?。?/p>
2、機器語言和微指令集的概念。
3、程序的概念。
4、匯編語言是低級語言但不是機器語言。
5、高級語言主要有那些?(C,C++,Basic,Pascal,F(xiàn)ortran,C#,Java等等;如果你是中國軟件業(yè)的英雄,你也寫一門語言,最好不用英語)
6、編譯程序和解釋程序的概念和其原理。(編譯器是高手和專家編寫的)
7、HTML、XML等是標識性語言。
8、Prolog是人工智能語言。
9、操作系統(tǒng)OS的概念和原理。(Windows98,Windows2000,Windows NT,UNIX,Linux,等等都是OS,還有一些實時OS,嵌入OS,編這些的絕對是高手)
10、Windows編程說白了就是Windows API的調(diào)用。(中國的程序員很多只是會編windows程序,用的是VB,我的建議是這些程序員頂多只是低級編碼員,我稱其是coder)
11、VC++、VB、BC、BCB、Delphi、VF等都只是編程的工具和環(huán)境,不是編程語言。
12、面向結(jié)構(gòu)的設(shè)計概念。
13、面向?qū)ο蟮母拍?。(好好理解,兄弟,這個東西還是很重要的)
14、軟件工程的概念和原理。(如果你想當老總就需要好好研究了,系統(tǒng)分析員比編碼員要高一個等級,薪水也高喲)
15、數(shù)據(jù)庫的概念。(要熟悉一些著名的數(shù)據(jù)庫系統(tǒng)和語言的名字,如Orcle,SQL,DB2,DyBase等)
16、了解網(wǎng)絡(luò)概念。
17、了解多媒體概念。
18、熟悉和掌握數(shù)據(jù)結(jié)構(gòu)和基本算法。
19、是不是要求太高了,別著急慢慢來,進步在不知不覺之中。(一旦開始學習,一個月以后你就會有一個基本的概念;兩個月以后你就會感覺自己有了全面的基礎(chǔ)知識;當你知道編程序是怎么回事時,說明你已經(jīng)入門了。也有很多人編了很多年程序還沒有入門呢,你不會希望自己步其后塵吧。要有信心和耐心。沉不住氣怎么能成大事?!)
(三)教材推薦 ――-推薦的教材主要還是針對概念來的,最好選用名校的教學用書。
1、《計算機組成原理》(熟悉)
2、《數(shù)據(jù)結(jié)構(gòu)》(掌握)
3、《操作系統(tǒng)》(了解->熟悉)
4、《The C language》(掌握)
5、《編譯原理》(了解原理)
6、《匯編語言》(了解)
7、《計算機網(wǎng)絡(luò)》(了解)
8、《軟件工程》(了解)
9、《關(guān)系數(shù)據(jù)庫》(熟悉)
10、《The C++Languege》(掌握)
11、《面向?qū)ο笤O(shè)計》(掌握;結(jié)合C++學習)
(四)一些經(jīng)驗和體會
1、真正的程序員用C++;(一位專家說的)
2、動手去編程序;
3、動腦去思考;
4、要有良好的編程風格;
5、讀書,讀好書,盡量讀原版書!(我反復強調(diào)這一點,讀書要有選擇,堅持讀好書,名家出的經(jīng)典書,不要浪費實踐在一些粗制濫造的書上面;堅持博覽群書)
6、有自己的學習計劃;
7、總結(jié)自己的經(jīng)驗教訓;(準備一個筆記本,記錄錯誤和心得)
8、不要怕學新東西;
9、要有軟件工程的思想;
10、善于發(fā)現(xiàn)問題,然后去尋找答案;
11、向高手請教;(要虛心直到你成為高手)
12、和同行交流;(不善于交流肯定不行)
13、懂得軟件的實質(zhì),不要被千變?nèi)f化的表象所迷惑;
14、真正要學習用的是編程語言和方法,不是什么庫,什么類,什么工具;(學用那些什么庫都比較簡單,但光會這些庫,我覺得還遠遠不夠)
15、學習wiodows編程主要是學習windows OS和win32 API;
16、有空了解一下嵌入式開發(fā);
17、有空了解一下PDA軟件開發(fā);
18、了解一下.NET框架和C#語言,也許它是你新的衣食父母;
19、要有耐心,不要作浮躁的人;
20、對程序加注釋,并保留你的老程序;
21、學到的東西越多,了解的越多,你就越接近專家;
22、有空去逛逛CSDN,那里有你很多知己;
23、要有信心成為一個優(yōu)秀的程序;
(五)一些好書的推薦
1、《The C Programming language》(Keinighan& Dennis Ritchie 1988)
2、《The C++ Programming Languague》(BjarneStroustrup 1997)
3、《Inside The C++ Object Model》(lippman)
4、《Effective C++》
5、《More Effective C++》(lippman)
6、《Exceptional c++》
7、《C++面向?qū)ο蟾咝Ь幊獭?/p>
8、《設(shè)計模式》
9、《Thinking In C++》
10、《The Standard C++ Bible》(一般推薦)
11、《The Art of Computer Programming 》
12、《Programming Windows》(Charles Petzold)
13、《VC++5.0技術(shù)內(nèi)幕》
14、《MFC 深入淺出》
15、《軟件需求》
16、《Advanced Windows》
17、《C++ primer》
18、《win32程序員參考手冊》
19、《用TCP/IP進行網(wǎng)際互連》
20、《COM 本質(zhì)論》
(六)學習計劃----------這只是我的計劃
1、《計算機組成原理》
2、《操作系統(tǒng)》
3、《數(shù)據(jù)結(jié)構(gòu)》
4、《匯編語言》
5、《 C 》
6、《 C++ 》
7、《VC 技術(shù)內(nèi)幕》
8、《Programming Windows》
9、《深入淺出MFC》
10、《Advanced Windows》
11、《Inside The C++ Object Model》
12、《Thinking in C++》
13、《Effective C++》
14、數(shù)據(jù)庫
15、網(wǎng)絡(luò)
16、嵌入式OS和編程
17、硬件單片機
18、.NET和C#
19、軟件工程 20、UNIX和Linux
?2010 Baidu
第四篇:程序員必做的50題
【程序1】
題目:有1、2、3、4個數(shù)字,能組成多少個互不相同且無重復數(shù)字的三位數(shù)?都是多少? 【程序2】
題目:企業(yè)發(fā)放的獎金根據(jù)利潤提成。利潤(I)低于或等于10萬元時,獎金可提10%;利潤高于10萬元,低于20萬元時,低于10萬元的部分按10%提成,高于10萬元的部分,可可提成7.5%;20萬到40萬之間時,高于20萬元的部分,可提成5%;40萬到60萬之間時高于40萬元的部分,可提成3%;60萬到100萬之間時,高于60萬元的部分,可提成1.5%,高于100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應(yīng)發(fā)放獎金總數(shù)? 【程序3】
題目:一個整數(shù),它加上100后是一個完全平方數(shù),再加上168又是一個完全平方數(shù),請問該數(shù)是多少? 【程序4】
題目:輸入某年某月某日,判斷這一天是這一年的第幾天? 【程序5】
題目:輸入三個整數(shù)x,y,z,請把這三個數(shù)由小到大輸出。【程序6】
題目:用*號輸出字母C的圖案。【程序7】
題目:將一個正整數(shù)分解質(zhì)因數(shù)。例如:輸入90,打印出90=2*3*3*5?!境绦?】
題目:輸出9*9口訣。【程序9】
題目:要求輸出國際象棋棋盤?!境绦?0】
題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數(shù)為多少? 【程序11】
題目:判斷101-200之間有多少個素數(shù),并輸出所有素數(shù)?!境绦?2】
題目:打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個三位數(shù),其各位數(shù)字立方和等于該數(shù)本身。例如:153是一個“水仙花數(shù)”,因為153=1的三次方+5的三次方+3的三次方?!境绦?3】
題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,6 0分以下的用C表示。【程序14】
題目:輸入兩個正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù)。【程序15】
題目:輸入一行字符,分別統(tǒng)計出其中英文字母、空格、數(shù)字和其它字符的個數(shù)?!境绦?6】
題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數(shù)字。例如2+22+222+2222+22222(此時共有5個數(shù)相加),幾個數(shù)相加有鍵盤控制。【程序17】
題目:一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為“完數(shù)”。例如6=1+2+3.編程找出1000以內(nèi)的所有完數(shù)?!境绦?8】
題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地時,共經(jīng)過多少米?第10次反彈多高? 【程序19】
題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個
第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少?!境绦?0】
題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出三隊賽手的名單?!境绦?1】
題目:有一分數(shù)序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數(shù)列的前20項之和。【程序22】
題目:求1+2!+3!+...+20!的和 【程序23】
題目:利用遞歸方法求5!。【程序24】
題目:利用遞歸函數(shù)調(diào)用方式,將所輸入的5個字符,以相反順序打印出來?!境绦?5】
題目:有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數(shù),他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最后問第一個人,他說是10歲。請問第五個人多大? 【程序26】
題目:給一個不多于5位的正整數(shù),要求:
一、求它是幾位數(shù),二、逆序打印出各位數(shù)字?!境绦?7】
題目:一個5位數(shù),判斷它是不是回文數(shù)。即12321是回文數(shù),個位與萬位相同,十位與千位相同。【程序28】
題目:請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續(xù)判斷第二個字母?!境绦?9】
題目:對10個數(shù)進行排序 【程序30】
題目:求一個3*3矩陣對角線元素之和 【程序31】
題目:有一個已經(jīng)排好序的數(shù)組?,F(xiàn)輸入一個數(shù),要求按原來的規(guī)律將它插入數(shù)組中。【程序32】
題目:將一個數(shù)組逆序輸出?!境绦?3】
題目:打印出楊輝三角形(要求打印出10行如下圖)【程序34】
題目:輸入數(shù)組,最大的與第一個元素交換,最小的與最后一個元素交換,輸出數(shù)組?!境绦?5】
題目:有n個整數(shù),使其前面各數(shù)順序向后移m個位置,最后m個數(shù)變成最前面的m個數(shù) 【程序36】
題目:有n個人圍成一圈,順序排號。從第一個人開始報數(shù)(從1到3報數(shù)),凡報到3的人退出圈子,問最后留下的是原來第幾號的那位?!境绦?7】
題目:寫一個函數(shù),求一個字符串的長度,在main函數(shù)中輸入字符串,并輸出其長度?!境绦?8】
題目:編寫一個函數(shù),輸入n為偶數(shù)時,調(diào)用函數(shù)求1/2+1/4+...+1/n,當輸入n為奇數(shù)時,調(diào)用函數(shù)1/1+1/3+...+1/n 【程序39】 題目:海灘上有一堆桃子,五只猴子來分。第一只猴子把這堆桃子憑據(jù)分為五份,多了一個,這只猴子把多的一個扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一個,它同樣把多的一個扔入海中,拿走了一份,第三、第四、第五只猴子都是這樣做的,問海灘上原來最少有多少個桃子? 【程序40】
題目:809*??=800*??+9*??+1 其中??代表的兩位數(shù),8*??的結(jié)果為兩位數(shù),9*??的結(jié)果為3位數(shù)。求??代表的兩位數(shù),及809*??后的結(jié)果?!境绦?1】
題目:八進制轉(zhuǎn)換為十進制 【程序42】
題目:求0—7所能組成的奇數(shù)個數(shù)?!境绦?3】
題目:一個偶數(shù)總能表示為兩個素數(shù)之和?!境绦?4】
題目:判斷一個素數(shù)能被幾個9整除 【程序45】
題目:某個公司采用公用電話傳遞數(shù)據(jù),數(shù)據(jù)是四位的整數(shù),在傳遞過程中是加密的,加密規(guī)則如下:每位數(shù)字都加上5,然后用和除以10的余數(shù)代替該數(shù)字,再將第一位和第四位交換,第二位和第三位交換。
第五篇:怎樣做一名合格的程序員
作者:xx,1990年畢業(yè)于xx工學院計算機軟件專業(yè),后又于xx年畢業(yè)在xx大學完成軟件工程專業(yè)碩士的學習,現(xiàn)供職于CNpC旗下的一個行業(yè)軟件研發(fā)中心,因為在網(wǎng)上看了許多有經(jīng)驗的各路軟件開發(fā)人員寫的好帖,一時手癢興起,也湊一篇壯壯聲勢。sO100
假設(shè)你是一名軟件專業(yè)畢業(yè)的本科學子,如何在工作中~成為一名有較高職業(yè)水準的程序員呢,本文試圖總結(jié)作者從事15年軟件開發(fā)工作的感想,希望對有志成為職業(yè)程序員的人有所幫助,并借此機會感謝原xx工學院計算機系的和智玲老師和張懷寧老師,特別感謝我的碩士導師,xx大學計算機系的博導鄭國梁教授。
注:本帖言辭尖刻,乃作者脾氣秉性使然,如果你看著有氣,就請多多見諒,放下別看了。
程序就是一系列按步驟進行的操作序列,它有好多種級別,比如最低級的微程序、次低級的匯編程序、高級的各種編程語言程序、最高級的腳本語言程序,也許我列的不對,但沒關(guān)系,我要說的是不管是那個級別的程序,其本質(zhì)都是操作的邏輯序列。大多數(shù)系統(tǒng)和應(yīng)用程序都是建立在高級編程語言上的,比如C、C++、C
#、FORTRAN、BISIC、JAVA等等,就讓我們只關(guān)注這一級的編程能力吧。因此如果一個程序員的邏輯能力不高,他永遠都不能成為一名具有合格職業(yè)水準的程序員,我們在下面的討論有關(guān)編程能力的方方面面,最終都是為了最大程度地提高和實現(xiàn)一名程序員的邏輯能力。
一、掌握基礎(chǔ)知識:十六年寒窗的持續(xù)積累
從7歲讀小學起,經(jīng)過16年的學習,你從軟件專業(yè)本科畢業(yè)后,必須完成以下幾門專業(yè)課程的學習:計算機組成、操作系統(tǒng)原理、匯編語言、數(shù)據(jù)結(jié)構(gòu)、編譯原理、數(shù)據(jù)庫原理、軟件工程、結(jié)構(gòu)性設(shè)計語言(pASCAL、)、面向?qū)ο笤O(shè)計語言(C++、C#)、計算機網(wǎng)絡(luò)等,你最好還懂一些算法分析、分布式系統(tǒng)、計算機圖形學、形式邏輯、人工智能原理、軟件設(shè)計模式、軟件構(gòu)架/框架等研究生的課程,16年來,你積累的除了知識,更重要的是形成最適合自己的學習方法和工作方法。這些是你具備程序員職業(yè)水準的基礎(chǔ)能力,不要受什么計算機軟件怪杰之類傳奇的影響,那不過是小概率事件,而且這些怪杰們就算沒有讀過軟件本科和研究生,也往往自學了大多數(shù)專業(yè)課程,很可能比在校學習的學生對這些課程的精髓部分理解的更好,還有他們的工作方法和思維方式是特別而高效的,但普遍性差,可以借鑒,不宜模仿。好,所以現(xiàn)在你只需要問問自己,那些課程和知識都學會并掌握了嗎?如果是,那就準備好進行實踐了。
二、在實踐中提高:成為一名高水平的Coder好了,你畢業(yè)了,在校功課都不錯,也找了一個專業(yè)對口的工作,你想大展鴻圖了,可是別急,你的翅膀還不夠硬,不信我們說來看看。通常,你在工作中都會用到某一種單位/公司固定的操作系統(tǒng)和編程語言開發(fā)環(huán)境,比如Windows、UNIX、LINUX等操作系統(tǒng),又比如用VC、VB、pB、Delph、JAVA、Motif/XWindow、QT、OpenGL、OpenInventor等編程語言和開發(fā)環(huán)境,我們在后面把它們合稱為開發(fā)環(huán)境。就在校學習的有關(guān)開發(fā)環(huán)境的知識而言,大概你距工作需要的差距是不小的,當某個操作系統(tǒng)和編程語言環(huán)境成為你的飯碗時,就不應(yīng)也不能用通過課程/認證考試之類的眼光和要求來評價你的能力,即使你能考100分。
你需要深入地學習該操作系統(tǒng)和編程語言環(huán)境的各類開發(fā)手冊的所有內(nèi)容,你會說大多數(shù)你都用不上,其實你既對又不對,對的是單從使用的角度而言,你確實用不上開發(fā)手冊的大多數(shù)內(nèi)容,比如龐大的VC開發(fā)類庫和復雜的開發(fā)環(huán)境,你在實際工作中能用到的不到總數(shù)的1/10或1/5,不對的地方在于,你用到的部分不是孤立存在的,它們是整個體系中的一部分,只有對整個體系有了一個較完整的了解,才能得心應(yīng)手、隨心所欲地用好你用到的部分,你才算初步具備在這種開發(fā)環(huán)境下進行Coding的職業(yè)水準(還遠不夠程序員的職業(yè)水準呢),而這只是剛開始。如何才能真正掌握一種開發(fā)環(huán)境的全面的知識呢,最原始的辦法就是讀開發(fā)指南/教程、參考手冊,一般來講,學習開發(fā)指南/教程時,你如果是一個認真的人,都會完成5/10~7/10左右內(nèi)容的學習和練習,如果你想成為職業(yè)選手,就應(yīng)該完成9/10以上內(nèi)容的學習和練習。參考手冊不同,大多數(shù)所謂的“程序員”們只是用到了才翻翻,這差的太遠了,你應(yīng)該象讀開發(fā)指南/教程一樣,每個環(huán)節(jié)都要讀,比如VC,參考手冊中的每個類,類的每個函數(shù),都要讀上幾遍,它們往往是一小伙一小伙地糾纏在一起使用的,開始時讀得你毫無頭緒、心煩意亂,不要緊,還有一手呢,如果你開發(fā)環(huán)境安裝的全面,它們往往都有開發(fā)商做的demo例子可看,你就進入另一個境界了,開始時你關(guān)注demo中的具體技術(shù),后來你發(fā)現(xiàn)這些demo的程序?qū)懙亩歼€算不錯,結(jié)構(gòu)簡單但合理,如果你真的用心,就一定能發(fā)現(xiàn)一些個別的demo是極品,它所展現(xiàn)的程序邏輯結(jié)構(gòu)是你設(shè)計不出來的,你現(xiàn)在有點更關(guān)心它的程序設(shè)計構(gòu)架,甚于對你原始目的(某種相關(guān)的技術(shù)/技巧)的關(guān)注,這時的你,開始了從一名Coder向一名programmer的轉(zhuǎn)變,你會忍不住要看看開發(fā)商提供的源程序,比如.h和.cpp,通常你會找到include路徑下所有的.h程序,你才知道,哇!好多好多東東在參考手冊中都沒提到,你要學的太多了,沒時間顧及其它的業(yè)余愛好了,現(xiàn)在知道為什么程序員是年輕人的職業(yè)了吧,你要有足夠多的時間才行,即使你的智商有160。如果你走到這一步,在你工作的團隊中,已經(jīng)是經(jīng)常有人向你請教技術(shù)問題,經(jīng)常有人請求你幫忙debug,你已是公認的“高手”了,別得意,因為你仍然是個Coder,為什么這么說呢,你想想,你已深入了解了這個開發(fā)環(huán)境中的各種技能,知道一名Coder如何用好這些東西,可是你能設(shè)計的出提供給Coder們用的東西嗎?唔……,你想了想,可能還不太行。對了,就是這樣,你還是一名小我境界的程序員呢,本質(zhì)是個Coder,當然已是一名高水平的Coder了,然而你需要進一步登堂入室才能成為一名真正的程序員。
讓我們繼續(xù)吧,通常你
點也許有點困難,但這種事干的多了,你就會越干越快,越來越
得心應(yīng)手,你的邏輯能力飛速提升,你能看得上的邏輯結(jié)構(gòu)優(yōu)秀的程序開始不多
了,下一步就是練習。從工作中開始吧,如果你有空閑,你需要做至少兩類練習,一類是算法練習,所有的經(jīng)典算法都是經(jīng)典的邏輯,題目有的是,像個好學生
一樣吧,每年的國內(nèi)國際編程競賽都有邏輯要求非常高的題,你可以只選一兩道
難題來做做。當你可以把復雜的單遞歸程序(只有A調(diào)A)變成非遞歸程序時,已經(jīng)
不錯了,如果你能看得懂雙遞歸程序(A調(diào)A、A調(diào)B、B調(diào)A、B調(diào)B都有),我為你鼓
掌!你不必往下看了,我有點不好意思啦――班門弄斧,你快滾蛋吧!另一類是
把以前和當前你工作中你不滿意的程序推倒重新設(shè)計一遍,這非常重要,省時省
力,因為你熟悉需求,技術(shù)上也沒問題,目的就是改進程序的邏輯結(jié)構(gòu),很劃算
哦,唯一要克服的就是:你對推翻以前工作中那點小小成就的心理障礙,如果你
真想優(yōu)秀,說句粗話:這點心理障礙算個屁,一遍遍反復地推倒已有的成果只能
使自己快速進步,放手干吧,沒什么好可惜的,馬恩早就在《共.產(chǎn).黨宣言》里
說過了:在這個過程中,你失去的只有鎖鏈(禁錮你思想的鎖鏈)。
讓我們來總結(jié)一下,經(jīng)過自我否定后,再生的你盡管對過去的“業(yè)績”還有一些
眷戀,但已是一個初步具備職業(yè)水準的程序員了,掌握了相應(yīng)的技術(shù)和技巧,具
備了較高的抽象邏輯思維能力,最主要的特征是:能自覺地自我否定,不斷地追
求更高水平的邏輯能力。
在這個過程中,如果你能注意以下一些小的方面,你前進的步伐也許會快一些。
l從編譯原理的角度來理解你工作中使用的高級語言,如果你做到這一
點,至少有兩個好處,第一個好處是避免一大堆低水平重復出現(xiàn)的編譯錯誤。一
名優(yōu)秀的Coder平均在一個工作日中應(yīng)該完成200行以上的源碼,其編譯錯誤應(yīng)該
控制在5個以下,要知道這200行源碼不是一次完成的,所以大多數(shù)情況下你都要
追求一次編譯通過,而一名職業(yè)水準的程序員,應(yīng)該進一步做到即使用purify這
類的工具來檢查源碼,也不會存在嚴重的內(nèi)存泄露。第二個好處是可以提高源碼的可讀性和效率。規(guī)范地編寫你的代碼使你自己的邏輯清晰,因為你明白多加幾
個括號和空行、多換行對齊、多注釋,編譯器是會自動識別的,不影響程序執(zhí)行的效率,反過來,控制好遞歸調(diào)用和循環(huán)內(nèi)的if語句才是提高程序效率的關(guān)鍵,要全力避免遞歸,但要深刻理解遞歸,能通過自己建立堆棧來把遞歸程序轉(zhuǎn)換成非遞歸程序,要求還是較高的哦!
l避免思維陷阱,只要你是人就一定有自己的思維慣性,這一定又會表
現(xiàn)在你的程序邏輯中,有時你就是從這個慣性中跳不出來(誰都有這個時候),但
要心里有數(shù)才行,所以你需要幫助,如果你有幾個水平相若或更高的職業(yè)伙伴,太好了,當遇到花30分鐘還打不下的bug時,就別浪費時間了,找他們吧,最要緊的是能思路清晰明確地表述你的問題,通常你自己在這個過程中或者伙伴中就有
人把問題解決了,又快又好。另外,有幾個可以良性競爭的職業(yè)伙伴是人生的一
件幸事,1+1>2,大家各有所長,你最好做到及時公開你的成果,技不壓身嘛,IT
發(fā)展的這么快,你再優(yōu)秀,那點東東也沒有什么值得隱藏的,所以你可以技術(shù)或
水平不夠高,但千萬不可以讓真正具有職業(yè)水準的選手鄙視你的職業(yè)品質(zhì)和行為。
l有自己debug的特點,下面的說法作者不敢太肯定,只是經(jīng)驗之談。即
使在VC這種高度完善的開放環(huán)境下,你仍然應(yīng)該要求自己僅憑打印語句就能debug
。這也有兩點好處,第一個好處是,遇到bug你會認真想問題所在,而不是用
debug工具一步步簡單地追蹤卡在哪兒了,你定位bug范圍的方式是從大到孝從
粗到精,這是一種自頂向下的思維方式,而用工具追蹤,容易形成自底向上的思
維方式,這不算好,你應(yīng)該先看到森林,再看到樹木。我反復提及:程序就是邏
輯過程,大多數(shù)程序從main函數(shù)開始,是由數(shù)據(jù)結(jié)構(gòu)和功能子程序組成的一個樹
形結(jié)構(gòu)的邏輯過程(要認清即使是面向?qū)ο蟮某绦蛘Z言也是一樣的),它的執(zhí)行過
程是深度優(yōu)先的,但你定位bug應(yīng)該是廣度優(yōu)先的,好好想想這一點,嗯?第二個
好處是強迫你思考并記住而不是用工具看到調(diào)用過程,你大腦的抽象邏輯思維能
力和胳膊上肌肉的力量一樣,都是練出來的,如果你的bug是程序結(jié)構(gòu)上的邏輯錯
誤引起的,這一點就非常重要了,順便說一句,最難打的bug就是程序邏輯結(jié)構(gòu)錯
誤導致的bug。你要是真正明明白白地認識到這兒了,那我就沒什么東西可以告訴
你了。總之
p;,Linux操作系統(tǒng)的一些源碼不錯,是開放的,你可以合法地搞到,其它的不要說
是我建議你侵犯知識版權(quán)??!
四、天生神力:成為系統(tǒng)分析員
本來就論述如何成為一名職業(yè)程序員而言,本文已基本完成任務(wù)了,但《菜根譚
》有言:竭世機樞,似一滴投于巨壑,窮諸玄辯,若一毫置于太虛。既已乘興到
此,何妨多置一毫于太虛呢,作者不才,干脆盡興寫算了。
你要是運氣好,直接進入了一個嚴格規(guī)范生產(chǎn)的軟件企業(yè)就業(yè),剛開始就應(yīng)該是
按別人做好的軟件設(shè)計來實現(xiàn)編程,你可以有機會直接學習軟件設(shè)計,當你積累的足夠多了,能夠?qū)ζ渲械囊恍┰O(shè)計提出好的改進建議,而且干得又快又好,就
會漸漸地展露頭角,我相信你終有一天成為一名軟件設(shè)計人員(注意,不是軟件產(chǎn)
品設(shè)計人員),步入系統(tǒng)分析員的行列,但這還需其它的一些條件和自我~。如
果你在一個不規(guī)范的軟件企業(yè)工作,那也不錯,你很可能直接就有機會進行軟件
設(shè)計,然后開發(fā)、測試,甚至還不得不自己定義需求,把軟件開發(fā)過程的各個環(huán)
節(jié)走一個遍,當然這樣對你的要求更高,而且你也不容易得到及時有益的指點,在正態(tài)分布的情況下,你應(yīng)該是成長的很慢。但不管就業(yè)的單位如何,如果你決
心要成為頂尖軟件職業(yè)選手,通常什么客觀困難都阻擋不了你,然而你個人的因
素可能會阻止你的前進。下面提出的觀點純屬一己之見,傷人自尊之處作者在此
提前道歉,并建議你除非對本文有強烈的興趣,否則就請直接看第五節(jié)或放下別
看了。丑話已說在前頭了,在各種軟件開發(fā)組織的發(fā)展過程中的事實也證明,只
有少數(shù)程序員能成為系統(tǒng)分析員,我想這一點不是我杜撰的吧,因此你要是在看
接下來的部分時感到氣憤難當,那也實在沒著,純屬活該,因為作者只是在說明
自己的觀點而已,你最多可以呲之以鼻,表示一下你的輕蔑好了,但沒有任何理
由可以罵人!
作者自己沒有到微軟面試過,但身處軟件行業(yè),關(guān)于微軟的許多東東當然還是有
耳聞的,據(jù)說微軟招聘一名程序員要過五個已經(jīng)成為微軟程序員的面試關(guān),而且
是一票否決制,又據(jù)說大多數(shù)面試題并非編程,而是一些有關(guān)邏輯和智力的題,作者私下也做過許多流傳的微軟面試題,并對此做法深以為然。程序的本質(zhì)就是
邏輯,所以幾十年前就有人提出編程是一門藝術(shù),而藝術(shù)是要靠天份的,這一點
少有人反對。一個人的邏輯能力可以不斷提高,但其能到達的終極邏輯能力的層
次必定為其天生智力所限制,這一點就讓人不易接受了。好笑??!人們可以公開
承認自己沒有某種或全部的藝術(shù)天份,但要說自己邏輯天份不夠,換句話說承認
自己笨、IQ不夠高,往往是要怒發(fā)沖冠的,其實這又有什么區(qū)別呢?話都說到這
兒了,再次建議你如果不夠自信,就跳過這一節(jié)吧,直接看第五節(jié),好嗎?
好了,把話題說回來,你已經(jīng)成為一門合格的職業(yè)程序員了,如果要想成為從事
軟件系統(tǒng)設(shè)計的職業(yè)系統(tǒng)分析員,第一件事就是悄悄找一個標準智商測試的網(wǎng)站
或其它渠道,嚴格認真的測一測自己的智商,如果IQ低于130(正常智商是110),就請別費勁了,打消掉成為系統(tǒng)分析員的念頭吧!好!好!先請你冷靜一下,好
好想想,其實微軟面試時就是在測你的智商和邏輯數(shù)學素質(zhì)呢,這就是本節(jié)的標
題為“天生神力”的原因,因為設(shè)計就是從無到有地進行創(chuàng)造,無論是軟件還是
其它行業(yè)都一樣,可以有借鑒的,沒有現(xiàn)成的,設(shè)計就是創(chuàng)造!如果你IQ在130以
上,又決心要當一名職業(yè)軟件系統(tǒng)分析員,其實你不過是要準備好吃更大的苦而
已,有什么好虛榮的呢?
~還是從基本功開始的,過程和成為一名職業(yè)程序員差不多。必須使用設(shè)計工
具這一點是不用多說的。在工作中,你基本上遇到的是兩類方式的設(shè)計,一個是
結(jié)構(gòu)化設(shè)計,另一個是面向?qū)ο笤O(shè)計,就個人經(jīng)驗而言,面向?qū)ο蟮脑O(shè)計更好。
如果你工作中不得不采用結(jié)構(gòu)化的設(shè)計,你必須熟練地掌握數(shù)據(jù)流圖和控制流圖的分析和設(shè)計,一般來講,如果你把一個軟件中用到的數(shù)據(jù)模型設(shè)計好了,針對
功能化的流程,不難設(shè)計出數(shù)據(jù)流圖,但下一步設(shè)計控制流圖才是挑戰(zhàn),如果你
按照需求走不通設(shè)計好的控制流圖,那么你或別人在按照這個設(shè)計編程實現(xiàn)時,必定也走不通,沒有奇跡會發(fā)生,還是在設(shè)計階段嚴格要求吧,又有一點需要牢
記:返工是最慢的。當你在進行控制流圖的設(shè)計時,也不要妄想得到需求人員提
供給你明確的指點,通常他們要是能夠把需求的功能和操作次序?qū)懲暾脑?,?/p>
應(yīng)該就感恩戴德了,從需求中整理出功能、操作的拓撲次序和條件是你作為系統(tǒng)
分析員的職責
??纯?,要是沒有一點圖論的基礎(chǔ)和拓撲學的入門知識,你是當不
好一個職業(yè)系統(tǒng)分析員的,即使你天賦不錯,必要的數(shù)學和邏輯素質(zhì)仍然不可或
缺。也不用氣餒,永遠沒有最好的設(shè)計,只有更好的設(shè)計,反復地進行設(shè)計迭代,勇于推翻舊的設(shè)計,你將快速進步。如果你在工作中是采用面向?qū)ο筮M行設(shè)計的,那就更有利了,有關(guān)面向?qū)ο笤O(shè)計的書太多了,不用作者在此多費口舌,建
議精讀一本經(jīng)典的書,比如北大邵維忠等編譯的《面向?qū)ο蟮姆治觥罚行┓椒?/p>
和技巧可能過時,但其邏輯的基本原理是非常正確的,其本質(zhì)是,你在邏輯上是
如何認識這個世界的,你就是如何設(shè)計軟件體系結(jié)構(gòu)的,然后讀讀其它書,觸類
旁通,自己創(chuàng)造機會多實踐,成功自然會到來的,總之,不管是結(jié)構(gòu)化設(shè)計還是
面向?qū)ο笤O(shè)計,評價一下自己的軟件系統(tǒng)設(shè)計方案吧,有好多指標呢,比如是否
均勻和平衡?局部獨立性強不強?有沒有歧異的結(jié)構(gòu)?有沒有層次太多或太少?
有沒有某個層次太大、太廣?是不是邏輯結(jié)構(gòu)先復雜了再化簡的?還是只會設(shè)計
簡單的,復雜不起來(這一點是笨哦,如果出現(xiàn)多次,請你不要意氣用事,轉(zhuǎn)行吧)?最重要的一點,是否容易理解、實現(xiàn)和改進?你自己會得出評價的。如果有機
會看到別人的設(shè)計,一定不要錯過學習的機會,自己推導一遍,認真比較比較,獲益會較多。
走到這一步,你就應(yīng)該關(guān)注設(shè)計模式了,首先還是學習,這方面的好書有的是,但一般在工作中用到的設(shè)計模式較為單一,應(yīng)該多嘗試一下其它的設(shè)計模式。其
次必須要明白設(shè)計模式不是設(shè)計思路,也不能代替設(shè)計思路,比方你要從A到B修
一條路,設(shè)計模式只是讓你選擇,是修水泥的還是柏油的?是高架路還是普通的,但線路必須你自己定,而線路就是設(shè)計思路,模式對思路是有影響,但不能代
替,所以如果你的智商高達250,我相信你直接用匯編語言也能寫出面向?qū)ο蟮某?/p>
序來。第三在此有一個陷阱,很多系統(tǒng)分析員生搬硬套設(shè)計模式,全然不懂如何
融會貫通,在你的一項具體工作中,往往是以一種設(shè)計模式為主,其它模式為輔的,思維不拘泥于形式才是關(guān)鍵,而且也為你到達更高的軟件設(shè)計的境界做好準
備。
唉!都不知該怎么向下寫好了,因為已達到作者水平的極限了,我胡亂說一點,你湊合看吧。軟件設(shè)計最終的層次是:以無法為有法、以無限為有限,這句話是
李小龍說的,不是我說的。再拾人牙慧一把,類比一個故事吧,金大俠在《倚天
屠龍記》里講到張無忌初學太極,學會的標志是把剛學的招數(shù)全忘了,記住的是
太極的道理和精神,和李小龍有些相似喔,軟件設(shè)計也一樣,忘記所有的設(shè)計模
式,隨心所欲進行設(shè)計才是至高境界,所以你能到達多高的軟件設(shè)計的境界最終
將取決于你的哲學素質(zhì),這一點實在是不好寫啊,你自己領(lǐng)悟吧!作者只有祝福
了!
五、職業(yè)人的終極目標:全面~,成為Leader
這一節(jié)更不好寫,涉及到太多其它非技術(shù)方面的因素,特別是個人人生觀和世界
觀的~,如果本帖的點擊率超過作者私下期望的一個數(shù)值,那我就爭取盡力厚
著臉皮再補上吧。我只說一句,雖然大家都知道軟件開發(fā)是一個團隊性的工作,但追求參與一個大型軟件系統(tǒng)的成功開發(fā),是一名軟件人員的本能,就像拿破侖
說的不想當元帥的士兵不是好士兵,所以不追求實現(xiàn)大系統(tǒng)的軟件人員,也不是
一個好的職業(yè)軟件人員,但你只有成為Leader,領(lǐng)導一個優(yōu)秀的軟件開發(fā)團隊,才有機會實現(xiàn)這個終極職業(yè)目標,對不對?
好吧,不管你現(xiàn)在的感受如何,我都謝謝你能讀到這里!我不習慣假歉虛,就不
說什么作者水平有限,本文拋磚引玉,歡迎大家批評斧正之類的客套話了,雖然
作者水平確實有限。所以我認為你盡管有權(quán)砸磚,但實在沒必要搞回帖、或回罵、或頂之類的玩意兒,我只是盡興寫一點多年從事軟件開發(fā)工作的體驗,因此接
下來我就高掛免戰(zhàn)牌,不回復任何回帖了。再次謝謝你能有耐心讀到這里!希望
本文對你有所裨益,祝你成功!再見!