1. 程式人生 > >如何成為一名優秀的程式設計師(一)

如何成為一名優秀的程式設計師(一)

一位仁兄說的“程式設計師寫的程式不是演算法+語法 ,而是要能夠滿足使用者需求的工 具”我非常贊同,要想達到使用者需求就必須從各個方面來考慮如業務、人機互動 、效率等方面,而不只是一個語言(語法)的問題,語言(語法)只是工具,只 知語法不知其他那就真是程式設計機器了! 程式設計機器在印度高中生經過幾個月培訓,按照嚴謹的軟工方法,加上較高的管理 ,就可以勝任了!大家相信嗎,我是相信的!談到這裡我就不禁說到了國內教育 界最近在探討的問題“計算機科系的畢業生特別是本科大專生到底出來幹啥、如 何適應社會要求”,大家也看到了很多計科系大學生說精通N種語言,熟悉N種工 具,不知道學校裡的其他知識到那裡去了,甘願做程式設計機器,浪費了人民的納稅 ,幹高中生能幹的事,比較可惜吧!在國內現在就是這樣了,看過一則帖子:清華的計科系畢業聲在建築院裡搞開發還不如建築專業的畢業生。說著說著就岔道 了,國內的軟體開發業到底是需要那些人:如果僅僅是編碼機器,那我估計中國 矽谷還是做夢去吧!
    社會似乎也需要編碼機器,翻翻招聘廣告,做應用開發的都要求精通某某語言, 熟悉某某工具,很少需要懂管理懂軟工的人。以我個人一點偏激的想法,民族軟 件產業要騰飛,更需要的是能管理使用編碼機器的人,即管理人員、國內軟體產 業編碼機器已經很多了。希望不要惹怒了那些程式設計高手! system develop與Application develop在國內到底哪個能養活你,能賺錢,諸位 仁兄想必也知道,況且俺也沒發現幾家水平高的公司招這方面的人,畢竟OS,DB MS,COMPILER都被國外做了、另外也別跟我談LINUX,畢竟還是少數燒錢的人做的 事情,我先餵飽肚皮再說。我手下的很多搞4GL語言的程式設計師都想轉行學VC等所謂 的更低階的語言,我總是說“在XX城市,先用4GL工具生存,以後再學習VC吧!” ,說的簡單一點先解決肚子問題。如何判斷自己是否是程式設計機器?
1、面對需求不考慮使用者,只是考慮用那些程式技術展示自己的語言語法技巧 .
2、學習了N種語言 .
3、從來不學習或實踐軟工 .
4、語法語言水平在眾人中遙遙領先、特別是一些稀奇古怪的語法 憑著興趣和創造力去幹,卻重複繁瑣的勞動。 做著沒有意義-唯一意義是賺錢,而且真是出了半斤力, 拿不足八兩。 終日勞累,卻不能學自己想學的。最終結果是跟不上社會科技的發展 ,人已衰老。悲哀!!!
 

開發軟體的關鍵是要有想法,一個好的想法比什麼都重要。尤其是有關 網路方面的就更是如此。

入門還可以,但是要繼續深入瞭解可能要難點。 未必吧 偶覺得大學裡的高數 數理方法之類的, 如果你不是做研究的話, 應該是很少能 用到的 不過如果說到離散之類的, 倒還是時不時的能有點用現在的程式設計師比起十年前是不是要花更多的時間來 查幫助呢。系統越來越大,手冊越來越厚,軟體開發的 週期是不是越來越多的淹沒在查幫助之中了呢。

實際上一個程式設計師最終的技術需要和實際相結合。真正在編寫程式到達一定時候,語言的使用並不是最大的障礙,對整個專案的把握、軟體工程的把握、資料庫的設計以及執行效果的分析等等才是需要進一步考慮的東東!否則,為何大多數公司到要求有程式設計經驗了!這些不是程式設計師必須學的。但資料結構,編譯原理,作業系統原理等是必須要學好的,英文的多看,不懂計算機英語可不行。實我不是什麼中專生,而是我讀的中學和一個私人辦的電腦學校聯合開的電腦專業(並不是我中考考的差,而是這個學校太貪錢了,才被錄取到這裡,惱火,我們班裡中考成績從兩百多到四百多的都有,我就是四百多分(重理輕文的結果,要不然...),當時讀書的時候,我是班是的高手(其實只是比其它同學懂而已),大家叫我dos,因為當時學的都是dos的內容, 畢業後還沒有對程式設計很感興趣,只想找一個電腦的工作就可以了,哪怕是打字的,可是看報紙,去人才中心,看到都是要大學的,為此感到很失望.也對電腦失去了興趣.後來學校打電話到我家,說廈門廈華公司要招工,要不要去,我很快就答應了,因為當時沒工作,天天呆在家裡.後來打工的時候,天天象一個機械人一樣,重複著同一道工序,因此經常在深夜的時候,思索著自己的未來,由此重新生起了對電腦的感情,因此經常買電腦雜誌和報紙看(可以堆成一座山了).由於離我住的地方不遠處,有一個電腦培訓的,所以經常到那裡上機,而在學校裡學過的軟體也只有FOXBASE和WPS,其它的不值一提,所以上機經常用foxbase,直到這時候,才對程式設計產生了濃厚的興趣,一年後,自已買了一臺電腦,開始認真學習程式設計.由於我是屬於職業中專的,因此經常想,就算學得再好也沒有用,所以想考程式設計師,而考程式設計師要懂得c語言,所以就學習turbo c,學完了,學資料結構,同時看'C高階實用程式設計',澳門迴歸和2000年的兩個晚上,我都是在程式設計中度過的.由於我這個人對書很感興趣,經常在星期六,星期七去書店,而在書店裡,也是看程式設計方面的書,而看到的程式設計書籍大部份都是windows方面的,為此也經常思索著學dos程式設計到底有沒有用.後來,春節放假(要2月13日上班)回老家,天天去新華書店(正月初一也去),看到也都是windows程式設計方面的書多得像狗屎一樣,所以就下決心學windows程式設計,因此正月初四(快餐店還沒有開張)就去廈門了,很快買了delphi的書和d版delphi5,瘋狂地學習(到目前為止,買了8本delphi的書,因為國人的寫的書實在太爛),而由於遇到不懂的又不知道怎麼辦,為此想到了網路,但在外打工不可能上網(上網咖太貴),所以就辭職了(4月21日),現在,程式設計師考試快到了,是報還是不報一直猶豫不覺,困此才有此問題.打工的歲夜,我永遠不會忘記,因為付出太多了,也失去了太多(壞了兩個光碟機,瘦了幾斤),直到現在,腦海裡還不時浮現起那幾個無眠的夜晚.忠心感謝大家.我不認為編碼的人就是機器, 而系統分析就不是機器, 其實系統分析員就是銷售的機器, 所有職員有是老闆的機器.它們之間這是不同工種吧了, 當然對系統分析要求要高一些, 薪水也高一些, 但更讓人佩服的是銷售, 是他們驅動了整個的運作.我也是個中專生, 還是學機械的(後來自學了計算機), 我非常瞭解在傳統的製造業是如何的規範, 設計人員設計圖紙, 然後經稽核, 再到車間試樣, 再根據情況, 修改圖紙, 如此反覆幾次後才能一個產品定型,而在軟體界, 就沒那麼好了, 領導會說, 這個你做, 那個他做, 也沒有經過很細的分析(國內很多都是這樣), 在我們這裡也沒有系統分析員, 每個人都是設計員, 也是程式設計員, 雖然這樣對個人來說, 能學到很多東西, 但不利於專案.我國的軟體過程水平,確實令人擔憂, 目前為止只是, 幾個人十幾個人的小軟體, 還沒有能拿得手的大型軟體.至於中專生程式設計問題, 我
認為只要入了這個行, 就不會比本科生差, 因為對他來說沒有優越的學歷條件, 那麼只好埋頭苦學, 但這正好適應當前計算機軟體迅速發展的今天, 學歷只能代表過去和基礎, 更需要的是有能力的人, 解決問題的人, 實幹的人.對我來說確實有時有點自卑, 沒有上過高中和大學(由於那個年代, 我只知道能為父母減少一點負擔就行了), 所有我一直在努力的學習(corba, uml, java, 軟體過程等), 目前為止我並沒有覺的我的構架能力和編碼水平比他們差, 只是覺得E語言實在太差.過計算機本科又如何?我有幾個同學到銀行去搞業務了,有同學任教,有同學收稅去了......60多個人真正現在搞計算機的還就只有幾個人,再看看當時這些計算機本科生的畢業設計,//faint有的人到最後連vb都搞不定,但他們什麼編譯原理啦什麼組成原理啦什麼軟體工程啦學的(應該是考試的分數)真還不
錯,至少我感覺有些概念比我清楚(上課沒聽?)所以我覺的中專生並不比一般大學生差(當然有些重點學校除外//hehe),有時中專生有更大的壓力逼迫自己去學習,學歷不是重要的,關鍵是一個人的素質.我們不能將目標定位在做程式設計師或編碼員(Coder)上光會寫程式碼有什麼用?那叫“編碼員”,在國外是屬於體力勞動的,不像國內,會寫程式的就叫高科技。重要的是分析問題、解決問題和規劃的能力,系統分析,系統設計及專案規劃才是正途。這就需要學習所謂的基礎課程了,如:軟體工程、離散數學、資料結構等等。從vb到現在開始學vc後,一個人搗鼓了幾天也沒有什麼新發現。跟本不知道VC的程式設計思想是什麼,請大蝦們告訴我,它和VB的差別真是太大了。VC的博大在於MFC的操縱,它是Win32API的封裝.思想在於怎樣瞭解MFC的內幕,它的執行機制.差別也大,差別也不大!這要看你對API的理解了,雖然VC++的視覺化沒有VB的好,但是不是絕對沒有的,其對而且對話方塊的編輯是跟VB一樣的,不過不是像VB那樣放在第一個介面罷了,VC++的博大精深是VB難以望其項背的!:)而且VC++是完全面向物件的程式設計工具,而
VB是不夠完全的面向物件程式設計工具,VC++是完全編譯語言,VB是本地編譯語言,不夠完全,VC++效率高,封裝性好,繼承性高,VB效率相對低了很多,但介面友好,二者只能取其一,或者使用VC++,VB輔助(因為VB開發快),當然Delphi,BCB也是不錯的選擇。

程式設計師不應依賴開發工具,程式設計師更應該擁有的是一種思維、一種精神、一種觀念。就像Richard.M.Stallman一樣,有自己的精神,為自由軟體而奮鬥。就像求伯君,為民族軟體的振興而奮鬥。這才是真正的程式設計師。
    應該說,他們更注重的不是技術,而是軟體的思維,軟體的靈魂!!我剛學VC的時候,還沒有上網.身邊也沒有一個可以問的朋友,所以大部份都是自己啃的.那種感覺真是很痛苦. 現在在網上就不同了,可以得到太多的資料了,而且還可以得到線上幫助.但這些都不是學習的關鍵. 相信各位也知道VC的難度,並不是那麼容易上手的,所以要想學會,學好VC,靠外力是不可能的.主要得靠自己. 自己要有一份難得的毅力,對程式設計的狂熱也可以在一定程式上起到幫助.我就是這樣的.起初,沒有人幫我,我學習VC是三天打魚兩天晒網,學習進度很慢,幸好對程式設計的執著,使得自己堅持下來了. 如果你從來就沒有接觸過程式設計,那你學習VC的速度可能會比學過面向過程程式設計的人要慢一些,因為你要去理解命令及語句的含義.但只要你努力,並且可以得到別人的幫助,我相信在半年內會對VC有一定的認識. 請學赤面向過程程式設計的朋友也不要笑,因為面向過程與面向物件實在是區別太大了.就拿封裝一詞來說吧.當初我是左想右想才想通的.所以不要自己學過程式設計,就會在學習VC的通道上比別人輕鬆. 現在有一種現狀應該讓我們注意.我發現有很大一部份初學者覺得VC是一種語言,C++又是另一各語言.我在和一些初學者的交談當中,查覺到了這一點.有的初學者竟然還認為我學VC為什麼就一定要學C++?我想這個問題是我們大家都沒有注意到的一個問題.就是向初學者講述C++對VC學習的重要性. 我這有個例子,跟大家講一下. 我有個同學,他接觸程式設計比我要早,在我還在為VC中"::"符號怎麼標記的時候,他已經在學習C了.後來,我對VC稍有理解的時候,他也發覺C的跟不上時代的腳步了.我便提議他從C++語言學起,可他認為自己有C的學習功底,根本就用不著再去學習C++.可在學習VC的當中,遇到的困難真是數不勝數.最近,他還是去買了一本學習C++的書.從頭再來學習C++. 我希望通過這個例子,能讓廣大的初學者知道,C++對VC學習的重要性。
    學習VC必須有狂熱的程式設計熱情,否則是很難堅持下來的,我周圍就有幾個這樣的人,他們比我先學VC近半年,但現在仍然學不會,而我現在雖說不是很厲害,但基本的應用程式是不在話下,我就是天天看書,上機實踐,幾乎所有的時間都泡在裡面,有時連吃飯都在想,為什麼,因為我確實想啃下這塊硬骨頭,我不想半途而廢,我覺得學習VC不僅僅是學到了更多的東西,最主要的是培養了我們自己一種堅持克服困難的毅力。
對於VC,我有幾點經驗:
1。技術為本,語言為次.
2。MFC的單個類有用,DOC/VIEW要小心。
3。OOP要小心,使用不當反而造成大量的工作和糟糕的程式碼。
4。如果可能,考慮選擇使用Delphi(CBuilder+VCL)。
5。到了一定程度,一定要學COM。
    要學VC,必須有對C++深刻的理解,對WINDOWS執行機制的深刻理解。尤其想成為VC高手。舉例 , 對於虛擬函式,不僅要知道有這麼一個東東,更要知道它的記憶體映象 。這樣才能對VC中很多的東西舉一反三,事半功倍。本人學習VC近2年,但自覺第一年由於心情浮躁,把VC的書翻了一遍又一遍,卻每次都只看了一點就無法再深入。直到畢業前夕,痛定思痛,克服浮躁,認認真真的從最基本的開始學,把每一點都搞的水落石出,經過三個月的刻苦,終於大成。直到現在,半月搞定COM/DCOM,都託當日刻苦之福,因此勸告想學VC的朋友,一定要頂住開始的艱難歲月。成功屬於刻苦者。

每個人都有自己的學習方法,也許這種方法對我來說有用,但不見 得就對所有的人有用.所以,請不要盲目的跟著別人的學習方法學習,要思考屬於自己的學習方法. 但我還是會向大家說出我自己認為比較好的一種方法. 學習程式設計其實與學習其它東西一樣,要想掌握它,就要實踐,實踐,再實踐.當你學到了一種新的技術或知識時,多實踐是鞏固學習的一種最好最有效的方法. 這個實踐不是照著書上的例子做一遍,而是根據自己的能力,給自己出題,然後去完成它.只有這樣,你才能發現自己的不足,同時又增加了自己的程式設計經驗. 但要成為合格的程式設計師,光
會寫程式碼是遠遠不夠的,更重要的是思考.謀定而後動,是 不變的真理.
    在我的理解,VC只是一個程式設計工具,就如BC、BCB、Delphi 一樣,其實對於程式設計最根本的就是三個方面,語言、開發包、 作業系統API,他們三個方面應該說是相對比較獨立的。

VC是MS開發的,所以針對的是windows api,你可以不會C++, 也可以在VC下用C寫出很優秀的程式,當然如果你比較熟練C++, 並且熟悉開發包MFC的話,工作可能要輕鬆不少。所以在我看來,學習的過程可以是這樣的:
1、先學習C或C++,在windows的console環境下編寫不太深入涉及API的程式;
2、在基本上掌握了語法之後,開始接觸簡單的系統API,學習 Windows的程式設計原理和機制;
3、在可以編寫簡單的選單程式,可以簡單地在WM_PAINT下操作 GDI函式後,開始學習MFC,可以從Step tourist學起,看MFC的原始碼,理解幾個關鍵的巨集的定義與實現,特別是MESSAGE MAP。 在學習的過程中為了給自己增加點挑戰,儘量不要使用resource edit,試著自己編碼實現控制元件的建立,訊息的響應。 再就是看自己的造化了,動手做一些小工具,特別是自己平常需要的,對自己的提高也應該是很有幫助。 究竟我們要的是結果!良好的分析問題高效清晰地肢解問題的能力才是我們真正要不斷學習的吧?

和學習其他知識一樣,重要的是獲得提出問題,分析問題,解決問題的能力,不是為程式設計而學習,你具有什麼樣的思想,就會寫出什麼樣的程式。學一門語言,不能僅僅是語言,要注重語言背後的思想方法,看他是如何來解決某一問題的,為什麼要這樣去做,他總是要符合客觀事實的,就像人說的話一樣,存在某種邏輯,資料的組織,資訊的傳遞,靠你自己的頭腦去建立,然後看C++中有什麼可以幫你的,該怎麼樣用他來表達自己的想法。只要你認真實踐,努力去做,尋求樂趣,就會達到目標。我雖然 真正認真學習程式設計的時間不長,但現在我是認真的,就有了以上的體會。

學習VC++有相當的內容要學,而最後的深度則看個人的悟性與勤奮了。
    1)掌握最新標準的C++。(2個月)
如果曾經在大學裡自以為學過C/C++,還對dynamic_cast/static_cast/template/try/catch/throw/stl/...感到
陌生,那你該Refresh一下新的ANSI C++標準了。 ----此與VC++無甚關聯,g++/bcb均有所支援。
 
    2) 學習SDK程式設計;:-O (6個月) 痛苦是暫時的,必要的,堅持就是勝利! 建議用Lccwin32/Masm32/Tasm編寫小而精的工具軟體; "Windows Programming Guide."   "Advanced Windows programming "

3) 研究MFC原始碼。(6個月)
不要被一大堆的巨集所矇蔽,just track and dig into it!! 在知道MFC如何擴充套件,包裝SDK之後,自可功力漸進,不被其MFC系統框架所困繞。"MFC Internals"

4) 研究OLE/COM技術。
COM/ActiveX技術是MS的核心技術,只有徹底洞察其理論精髓才可以體會現在的
作業系統的技術趨勢,以不變應萬變。
"Inside Ole 2"

***幾點建議***:
1) Delphi/BCB/VB可以很快構築介面,但對於想真正學習、理解系統不是一個好的平臺,但如果有時間讀一讀VCL的原始碼,看看Borland是如何封裝系統的,也可借鑑不少。
2) 學習ASM對理解C++有很大益處。Soft-ICE也是和VC++結合在一起的好工具;
3) 語言本身是皮毛,演算法是筋骨;無論高階語言如何發展,在理解作業系統的基礎上不斷自我創新的能力是源源不斷的;如果精髓一旦瞭然於胸,選擇何種開發工具都可以駕御,一見如故了。

每個人學習的過程都會不同吧,我在98從TC轉向VC時,對Windows的訊息機制一點概念也沒有,對著個MFC不知所措,幾個月下來一點進展也沒有。我於是暫時轉向win32位程式設計。整整一年時間吧,我就是與API打交道,連編輯選單條對話方塊等資原始檔時也用Uedit32手工編寫,為的是希望能對編譯器的全過程有個感性的瞭解。之後我再轉向MFC時,果然發現兩者是相通的,雖然有一定的區加,不過有了win32位程式設計的基礎再看MFC 時會發現它比win32位程式設計要方便了太多。 現在市面上的VC書很多,不過大多是入門書。我以為要精通VC(只是以為,本人自已距精通還遠的很)應該多看多寫程式,看書只能是入門,會用了而已。我不贊成濫用ActiveX,一來我以為它的效能很成問題,真是又大又慢又不穩定(可能是我有點偏激了吧),二來用了它您的程式今後就要被別人牽著鼻子走了。有次我用了個控制元件,程式都寫了大半了,它給我來個繼續使用請支付333美元,我兩個多月的工錢,煩不煩人?現在我儘可能用別人寫的類原始碼(我已收集各類程式碼3-400MB了),一樣用起來方便,還能邊用邊學,必要時還能自已改造。 我以為在現代的網路時代,資料到處都有,無論什麼先進的技術,今天我不會我只要查到資料,快的學上幾天慢的一兩個月我也能學會,現在已沒有寫不出的程式了,寫不出是因為你沒有耐心寫完它。我以為現在的程式設計師不一定要多麼聰明,而更需要他有完成枯燥專案的耐心,找BUG的細心,對於金錢的平常心
(不要為了早日拿到錢而趕進度),最後最重要是有顧全大局,團隊協作的精神。 最後,王靖朋友的經歷與我實在是有點相似,算是同病相伶吧,真心祝您早日實現自已的人生目標!學習VC是一項費時費力的艱苦學習過程。為了真正用好VC,你 不得不先從OOP開始學起,也許瀏覽一本純理論的書要更有意思。 你將從另外的角度考察OO思想。接下來學習C++,學習WindowsAPI 學習MFC,剖析MFC,擴充MFC,創造自己的類庫(不要企圖寫一個 和MFC同重量級的類庫)。如果能夠精通Microsoft C編譯器的各種 引數,你就可以開始研究微軟C/C++語言編譯器的進化歷史(結合 各種背景知識)。 掌握了程式設計的思想,征服VC只是時間問題。

學習VC是接受微軟技術體系的過程。所需要學習的不僅僅是C++,MFC。 需要學習所有微軟的技術,包括Windows程式設計,Win32系統(實際上 Win32系統實現了很多我們在螢幕上能看到的東西,最起碼NT的核心 並不大),COM(深入研究它,理解物件是如何跨越程序邊界的,最終 能夠自如地在Exe中實現自己定義的接口才算到家了。不過這多少有些 不太必要。),DCOM,ctiveX,Windows DNA... 如果你想成為大拿,學吧,沒完沒了。最起碼,使用VC,你甚至於可以 開發自己的作業系統(當然與MFC沒有一點關係)。