在公司的頭兩年 C/C++程序員成長之路

從一次考試說起。2010年10月份,綜合部邀請我給新入職3個月的員工草擬考試試題,這些同事大部分在公司做的實習,算起來至少也有5、6個月的工作經驗了吧。試題的內容,是針對日常需要面對的問題出的案例,比如,查找文件、修改下權限等,其中最後20分題,就是按要求在屏幕上輸出一個由數字組成的菱形。說這些無非是想說明,考題比較簡單。但考試的結果卻是,有人得到80多分,有人得到20多分,相互間差距較大。根據考試結果,我與部分新人的直接領導聊了聊,基本如實地反應了各位同事的能力。其中,動手能力強、喜歡研究研究linux、平時也經常學習代碼、做些小修改的人,成績就很好。考試成績出來後,綜合部將考題發到了每個人的手,並說明了在2天后進行試題講解。在講解前這段時間,只有一位同事找過我,說他的試卷,有地方批閱的不對。他說的確實有道理,有一部分代碼寫出來了,我卻一分沒給,這樣我知道了有一個人看過試題。但這個人找我的目的並不是想得到正確答案,我想,或許他是想在講解時再學習吧,我這樣告訴自己。在進行講解時,我首先安排大家花30分鐘,將試題中畫菱形這道題再做一遍,目的是想看看,有誰會主動對試卷進行學習,結果我只能說很不理想。我想給這樣的同事一點建議:從技術上講,需要進一步提高對基本的C、UNIX知識的掌握,儘快將知識轉化成工作能力;從態度上講,要正確審視自己的能力,認真對待自己的工作,對於不懂不會的問題,要及時儘早解決。而解決的唯一辦法,就是學習、探討和研究。記得我剛參加工作,到公司時的導師對我說,“在公司的頭兩年,你就使勁學使勁學,保證有東西讓你學”。好吧,我就學吧。那時的我,應該和現在這些同事所面臨的問題比較相似,學什麼、如何學、學到什麼程度,怎樣才能達到一名合格員工的標準?其實,在討論學什麼東西之前,還有一個更爲重要的問題需要解決。那就是,爲什麼要學!!!我想,歸根結底,就在於我們的職業選擇。IT企業普遍有個特點,“把女人當男人用,把男人當**(此處略去2個字)用。”有句俗話說,“男怕入錯行”,我想這句話其實也同樣適用IT女生。我們可以做個小測試工,就是問自己一百遍“喜歡當程序員嗎”,如果你的回答總是肯定的,那麼好的,開始認真學吧;如果發現50多次後面,自己不再那麼確定了,那麼就爲自己打打勁,在後續的學習中多加努力;如果沒幾次就懶得回答這個問題了,那麼可能就真的應該好好想想,是否有必要在一個自己不喜歡並且無法投入的行業中浪費寶貴的幾年時光呢。有人會說,不試一試又怎麼知道喜不喜歡呢,這種看法,也有一定的道理,但我想說的是,認真思考,果斷決定,爲自己負責,爲企業負責。關於C/C++語言的學習,我個人有以下幾點感受:首先,做C/C++語言相關業務開發應該學什麼?

1、C語言這好像不用想,必須學的。

2、C++語言配合對OO的學習,也是必須的。

3、UNIX下的C編程學習了C和C++的語言後,因爲我們的應用程序一般都是在UNIX環境下運行,所以,學習UNIX環境下的相關技術也是非常必要的。

4、SHELL命令及編程要把程序在UNIX環境下運行起來,肯定需要和SHELL打交道。其實,不僅僅是編寫SHELL腳本,在做UNIX環境下的日常維護系統時,需要的常用命令也要熟練掌握。

5、ORACLE數據庫方面業界的老大,我們的應用基本上都使用ORACLE數據庫,又怎麼不學呢。

6、JAVA等頁面開發技術至少知道它們能做什麼吧。

7、質量體系公司有管理方面的質量體系文檔,包括過程管理類、項目管理類、工程管理類、支持類等4大類質量體系文檔,從到公司開始,就應該學習它、掌握它、精通它。

8、編輯工具、系統工具等各種工具包括sourceinsight、UE、PD、FTP、CRT、office、TOAD、PLSQL、Xmanager、CC等,統統都應該瞭解、掌握、會使用。

9、溝通能力“茶壺煮餃子,有嘴倒不出”是技術人員的通病。如何瞭解用戶的需求,如何掌握設計人員的想法,如何知道測試人員的意圖等等,甚至包括日常工作、生活的方方面面,都需我們良好的溝通。

10、本部門的業務,及其他部門的業務“技術是磚,業務是樓”,我們要利用手中的磚去蓋什麼樣的樓呢?如果我們不知道業務想要實現什麼,又怎能將業務需求做好,業務需求沒做好,客戶憑什麼要付錢買單?瞭解其他部門的業務,就是爲了做出更合理的設計。

其次,上述10點,說多不多,說少不少,應該如何去學?

1、C語言記得在大學期間學數據結構的時候,書上說,數據結構加算法就是程序。要實現一個算法可以有多種語言,但我們選擇的是C。C語言是基礎中的基礎,打好堅實的基礎,我們的技術根基才紮實。怎麼做呢?我的建議是,找出譚浩強的《C語言程序設計》,將每個章節的練習題逐個在UNIX環境下做一遍,效果要達到編譯成功、運行結果沒有問題。這種基礎性的練習一定要做,不要偷懶,別怕麻煩,更不要僅僅因爲認爲自己已經會了而不屑去做。俗語道“熟能生巧”,最起碼你也可以練習指法,縮短完成代碼的時間長度。說“細節決定成敗”,你敲鍵盤的速度比別人快,也是細節,即所謂“磨刀不誤砍柴工”。我個人認爲,這本書作爲基礎性教材還是很不錯的。程序員的工作,每天需要面對的是文本文件及文本文件的記錄,所以,就要求我們熟悉對文件、字符串操作的相關函數。比如,清楚掌握open、close、read、write、fopen、fgets、fclose、fwrite、fprintf等函數;知道open和fopen的區別;對於strcpy、strstr、strcmp、strncmp、strcasecmp、strcat、memset、memcpy等字符串的操作熟練。指針在C語言中的重要性不言而喻,分配了空間,就不要忘記了釋放;有malloc函數,就要關心free的地方;還有,free後一定要將指針設置成NULL。

2、C++語言可能有的同事首先想到的是《C++ Primer》,我個人認爲,這本書更適合達到一定程度的同事,否則的話還是建議從譚浩強的《c++面向對象程序設計》開始。同樣,練習題要認真做。熟練後有精力的話再看《C++ Primer》,可以有選擇性地看。當然,那麼厚的一本書,學習它還是需要一定的時間和方法的,所以,也不必在新人培訓期間急於求成,可以把它作爲技術支持類的書籍,在日後工作中遇到實際問題時,有針對性地深入學習。《Effective C++》和《More Effective C++》應該作爲必讀書目,雖然不一定要完全照做,但書中的主旨思想還是要深入理解,即使當時無法一下子吃透,也要儘量記在頭腦中。還有《Thinking in C++》也應該認真翻看,不知是否有人要抓狂了,但經典牛書又怎能不看?下面要介紹的是《C++標準程序庫》,與vector、list、set、map、string,相關的iteror如何使用,寫程序的時候insert()、find()、erase()、push_back()、push_front、make_pair()基本上都要用到。

3、UNIX下的C編程記得當年我就是捧着《UNIX 平臺下 C 語言編程》這本書,開始了我的第一個程序的編寫。程序是一個主控進程,用到了對目錄的操作、信號量、管道等。個人認爲,那本書的各個部分都堪稱經典,比如除上述內容外還有進程、共享內存、進程間通信、socket、多線程等,真正學好這些,想不成高手都難。現在的話,也可以看《UNIX環境高級編程》這本書。如果涉及到網絡相關程序,那麼《UNIX網絡編程》就是首選了。

4、SHELL命令及編程《LINUX與UNIX Shell編程指南》我一直用它。內容包括ls–ltr、find、grep、tar、gzip、ftp、top、cp、mv、chmod、chown、useradd、env、vi、more、cat、paste、diff、tail、head、history、split、df、wc等等。其中,vi命令要熟練使用;man命令是我們的幫助手冊,無論是命令還是程序的系統函數都可以進行查詢。

5、OracleOracle的書太多了,我們平時使用的sql並不太深,就推薦《Oracle基礎教程》。如果想往DBA發展,這個還是請公司DBA回答,我就不班門弄斧了。

6、JAVA等頁面開發技術在這個時代,你想不知道JAVA都難。推薦看一下基礎的JAVA、JSP、SPRING、STRUCTS、Hibernate書籍。

7、TD-OSSP在公司的過程財富庫中,找到組織標準過程,就可以看到相關文檔了。剛到公司的新員工,應該先學習相關的編碼規範,學會看懂需求、設計文檔。

8、編輯工具、系統工具等各種工具SourceInsight,C/C++編輯工具,個人推薦使用,一般的語法錯誤都可以檢查出來,而且速度快。而Eclipse CDT網上的口碑不好,就沒去試用,感覺有點複雜有點慢。UE日常辦公必選編輯工具。PowerDesigner是物理模型、數據模型的設計工具,查看數據庫表結構,表和表之間的關係。PD支持導入導出建表腳本,支持按模板導出word格式,方便構建數據字典。ER-WIN也是很好的模型設計工具,它在描述實體關係時更清晰。FTP工具,將源碼放到主機。我一般就用TotalCommander了,注意,使用ASC模式上傳下載源碼,否則,^M在unix環境下會給我們搗亂。SecureCRT終端仿真程序,PC機和主機的橋樑,登錄到主機上完成相應的開發、維護工作。Office套件及open office相關Word的排版、Excle的函數、PowerPoint的動畫、Visio的各種流程繪圖,都有很大學問的。Toad、PL/SQL,訪問ORACLE的工具,Toad是大而全的ORACLE工具,尤其在監控管理ORACLE數據庫方面更突出。PL/SQL調試存儲過程比較好。“蘿蔔白菜,各有所愛”。XManager包含圖形化的遠程登錄窗口界面,遠程安裝ORACLE就需要它了。Clearcase是我們使用的配置管理工具,與ClearQuest做集成後,方便流程的管理。在CC中連接到一個項目,複用相應的開發流,在開發流上建立本地視圖,對目錄、文件這些元素進行操作,包括加入源控制、更新操作、檢出、檢入、撤銷檢出、合併、處理hijack文件、deliver操作、打基線、CQ中創建activite(CC中的defect)等,這些基本操作都需要清楚。還有就是查看文件版本樹,查看個人檢出的文件等。

9、溝通能力有很多大師級的書,我就不輕言了。例如,餘世維的《有效溝通》等等。個人的建議是,平時多注意別人好的溝通方式進行學習。對於不同的人,溝通方式也是不同的。學會站在對方的角度考慮問題、全面考慮問題,更利於達成一致意見。

10、業務的學習多看相關的規範,根據規範理解我們的程序是如何實現的。提高業務能力的有效方式就是多做需求。在做開發過程中,經常與導師及需求分析人員進行溝通。瞭解需求,不要僅侷限於當前要實現的需求,對源碼中發現的功能、與需求相關的業務等都要進行學習。比如,做累賬的需求,就可以對批價的業務進行了解,掌握哪些詳單表彙總到了賬單表。多做需求是我們提高能力的捷徑,剛開始的時候不要怕犯錯,不要怕被批評,“多年媳婦熬成婆”,大家都是這樣過來的。多問問題,嚮導師問,老員工問,向每一個可以教你知識的人問。經歷多,才能成長快。多做需求,就多學業務、多練習技術、多進行溝通,能力自然就提高了,有好的能力,就會被安排做更多的、更高級別的需求,從而進入一個良性循環。

提示一下:其實,上述內容,只是簡單地談論了我們主要使用的技術、工具和能力,在公司的《職位差異能力詞典》則對各能力項的要求進行了詳細的說明,大家可以參照學習、提高。最後,討論一下學到什麼程度吧。這裏想說的就是,如何合理地安排計劃,逐步提高我們的能力。在學習的過程中,建議選擇2到3門不同類型的書,交叉看,這樣不會造成對某門課程產生極度厭倦情緒的不良後果。C和C++,可能我們在大學期間都學過,所以,這兩門課串起來學習大概只需要2個月左右的時間。因而,在此期間,可以配合學習一下shell的相關知識。所以,登錄主機,vi編輯;make、gcc編譯程序;查看日誌;gdb調試解決問題等。這一套下來,C/C++語言和主機命令就應該能夠熟練掌握了。這部分的學習一定要紮實,以有效減少我們在以後的編程中出現bug的數量。bug數量少,最直接的效益就是可以節省我們自己的時間。其效果甚至不可估量。因爲,隨着發現bug的時間的推後,浪費的時間將呈幾何級地增加。多一個bug,測試組就需要多一個人去測試,而後是,測試人員再和開發溝通,開發修改bug升級程序,接着是再測試。所以,軟件工程裏有介紹,返工的工作量,不計入開發的工作量。再試想,如果發現bug的時間一直推後到現場,是由用戶測試反饋回來的,那情況又該如何?首先,影響用戶滿意度,其次,得重新開發、測試、發佈。神啊,救救我吧,讓我遠離這些“臭蟲”吧。兩個月過去了,不知道那些工具你是否已經上手,只是,編輯、編譯、ftp、CRT的都用過吧。時間也應該到9月中旬了,再花1個月時間瞭解一下oracle的基礎吧,就是sql語句什麼的,如果你能力足夠,可以自己安裝一個linux,再在上面安裝oracle,即可謂牛人一個。實在不行,就找人幫忙安裝一個windows版的oracle,就是在關機的時候別忘了先停oracle服務。一個月的時間很快,還有十一要過,不知道你的C語言在頭腦中還留存多少。這時,你的領導已經安排你看寫文檔和代碼了,那就好好研究一下吧。代碼也許很多,先按有框架代碼和業務代碼分。在框架代碼中包括對日誌、共享內存、常用函數、規則解析、數據庫連接、文件等相關函數。對於這些函數,需要自己寫例子,達到熟練應用。框架中對共享內存和表數據的封裝,是有一套模型支撐的,相關實體的作用,需要熟練掌握。達到可以部署相關代碼,並正常運行的程度。三個月的時間,我想應該學習這些內容吧。半年的時間過去後,新的一年就要開始了。這時候,技術上的儲備應該完成了百分之六七十。接下來,就是讓技術爲業務服務,進行爲客戶創造價值、實現自身價值的初始階段。做需求時,不斷學習業務,提高溝通能力,熟練應用技術,綜合性提升和完善自身的全面能力。在理解用戶需求時,最好直接與提出原始需求的人進行溝通,瞭解需求的來龍去脈,以便於掌握更多主動權,從而爲用戶提供更好的解決方案。做需求的過程中,更是需要與方方面面的人進行溝通,比如:與客戶溝通需求;與自己的領導溝通設計實現方案;與小組內相關人員討論代碼實現,進行單元測試,發現bug,處理問題;與測試人員溝通程序功能,完成系統測試,等等。這個過程中,同時也對相關的系統工具進行了學習,TMS、CC、CQ、開發工具、測試工具等。如果你的學習踏實有效,大約半年到九個月的時間,應該就可以基本掌握上述能力。當然,由於各專業的業務複雜程度不同,時間長短會有相應的差異。時光荏苒,一年到一年半的時間過去後,個人的能力差異可能就會逐漸突顯出來,能力強的,在某種程度上甚至可以帶新員工了。而還有一部分人,則可能仍需要加強基礎性學習。再給大家推薦一本書――《高效能人士的七個習慣》,或許可以從中借鑑。最後還想談幾句。大學期間,是個人家庭爲你付學費,你學了什麼,學了多少,可能更多在於自己的意願。而參加工作後,是由公司爲我們出學費,這時,你是否想到公司出資的目的,是否應該在工作上做出相應的回報?爲公司的發展負責,同時也爲個人的成長進步負責。希望每一位新員工能夠儘快轉化角色,早日真正走出象牙塔,融入公司、融入社會。最後,建議大家早睡早起,吃早餐,多運動,少玩電腦遊戲,過健康向上的生活,開心愉快地渡過這兩年的時光。

發佈了40 篇原創文章 · 獲贊 11 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章