1. 程式人生 > >公司中 C和C++程式設計師進階之路

公司中 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、Oracle

Oracle的書太多了,我們平時使用的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、開發工具、測試工具等。如果你的學習踏實有效,大約半年到九個月的時間,應該就可以基本掌握上述能力。當然,由於各專業的業務複雜程度不同,時間長短會有相應的差異。

時光荏苒,一年到一年半的時間過去後,個人的能力差異可能就會逐漸突顯出來,能力強的,在某種程度上甚至可以帶新員工了。而還有一部分人,則可能仍需要加強基礎性學習。再給大家推薦一本書――《高效能人士的七個習慣》,或許可以從中借鑑。

最後還想談幾句。大學期間,是個人家庭為你付學費,你學了什麼,學了多少,可能更多在於自己的意願。而參加工作後,是由公司為我們出學費,這時,你是否想到公司出資的目的,是否應該在工作上做出相應的回報?為公司的發展負責,同時也為個人的成長進步負責。希望每一位新員工能夠儘快轉化角色,早日真正走出象牙塔,融入公司、融入社會。最後,建議大家早睡早起,吃早餐,多運動,少玩電腦遊戲,過健康向上的生活,開心愉快地渡過這兩年的時光。

相關推薦

公司 CC++程式設計師

從一次考試說起。 2010年10月份,綜合部邀請我給新入職3個月的員工草擬考試試題,這些同事大部分在公司做的實習,算起來至少也有5、6個月的工作經驗了吧。 試題的內容,是針對日常需要面對的問題出的案例,比如,查詢檔案、修改下許可權等,其中最後20分題,就是按要求在螢幕

程式設計師(CC++、Java、Python經典書籍及學習順序)

程式設計師進階之路 初級: 《計算機程式的構造和解釋》 C語言: 1.《C語言程式設計:現代方法:第2版》 2.《C Primer Plus 第五版》 3.《C程式設計語言(第2版·新版)》 4.《C和指標》 5.《C專家程式設計》 6.《C 陷阱與缺陷》 7.《資料結構C

java程式設計師需要的學習過程

其實本來真的沒打算寫這篇文章,主要是LZ得記憶力不是很好,不像一些記憶力強的人,面試完以後,幾乎能把自己和麵試官的對話都給記下來。LZ自己當初面試完以後,除了記住一些聊過的知識點以外,具體的內容基本上忘得一乾二淨,所以寫這篇文章其實是很有難度的。 但是,最近問LZ的人實

JAVA-程式設計師

       自己大學期間學習的是軟體工程,從需求分析到專案上線整套流程都接觸過,大二就開始接觸java,但是沒有好好把握。大把時間虛度在lol裡面了。已經在工作的我,作為一個菜鳥程式設計師,自己也有一

ASP.NET 高階程式設計師——快捷鍵篇

引言:我們都知道快捷鍵使用得熟,將極大的提高我們的開發效率。可是我發現許多開發人員老喜歡用滑鼠去點,不擅長使用快捷鍵。 1、VS常用快捷鍵 這個我們記住開發中常用的就可以了。 F4:開啟屬性面板。

圖解|搞定分散式?程式設計師

> 程式設計是一門藝術,它的魅力在於創造。 65 哥已經工作兩年了,一直做著簡單重複的程式設計工作,活活熬成了一個只會 CRUD 的打工 boy。 > 65 哥:總是聽大佬講分散式分散式,什麼才是分散式系統呢? 分散式系統是一個硬體或軟體系統分佈在不同的網路計算機上,彼此之間僅僅通過訊息傳遞

程式設計師演算法練習:LeetCode專場

歡迎大家前往騰訊雲+社群,獲取更多騰訊海量技術實踐乾貨哦~ 本文由落影發表 前言 LeetCode上的題目是大公司面試常見的演算法題,今天的目標是拿下5道演算法題: 題目1是基於連結串列的大數加法,既考察基本資料結構的瞭解,又考察在處理加法過程中的邊界處理; 題目2是求陣列出現頻率前k大的數字,考察思維能

【2017DTC精彩重現】OracleMySQL DBA的

分享的初衷 這個是參考了朱贇[yūn]的一段話,我覺得已經很透徹形象了,畢竟在短短的幾十分鐘裡,你只能得到一些思想上的建議和思路,落到實處還是得靠自己。而參考和借鑑的過程也是自己修行的過程。第二句我關於堅持,有的同學說堅持是習慣,有的說是毅力,本質上來說,還是堅持的態度,是堅持做一件事情,還是堅持把一件

C++到Python,一個遊戲程式設計師

我的第一份工作是一加國內知名遊戲公司的邏輯程式設計師,必須技能是C++,但是一開始只是寫語法和C++很類似的一種指令碼(後來知道是從一個開源指令碼引擎AngelScript修改而成的)。學習遊戲開發的流程,填資料,用指令碼定製各種任務、副本等等。第一年還很有興致,第二年開始就意興闌珊了。 後來熟悉了整個

伊始--淺談C++程式設計師歷程(一)

最近看了一篇《回答阿里社招面試如何準備,順便談談對於Java程式猿學習當中各個階段的建議》,心中有一些感觸。 在看這篇文章前幾周,還挺迷茫的。不知不覺也工作了很久,雖然在上班期間,每天或多或少地都在寫程式碼,但是很多都是僅僅增加熟練度,或者說是將別人現有的

CPython程式設計師的JavaScript學習指南(譯)

function treeWalk(branch, visitor){     visitor(branch)     var i // not going to let you forget! you'll thank me later!      for (i in branch.children) {

一名C++程式設計師的成長

  1.不要看到別人的回覆第一句話就說:給個程式碼吧!你應該想想為什麼。當你自己想出來再參考別人的提示,你就知道自己和別人思路的差異。   2.初學者請不要看太多太多的書那會誤人子弟的,先找本系統的學,很多人用了很久都是隻對部分功能熟悉而已,不繫統還是不夠的。  3.看

c#程式設計師的成長

從上大學開始學的就是C#程式設計,當時不是因為喜歡,而是頭腦發熱不知怎麼的就選了這門語言,現在想來,覺得以前好、自己好像真的是選錯了,不是有那麼一句話嗎?   現在流的淚水和汗水就是當年選科 是腦袋進的水..... 不管怎麼說,既然自己選擇了在苦在累自己也得好好的幹下去啊。

樹莓派 (032) -字符問題(2) - 用c語言怎樣得到一個漢字的GB2312編碼(轉)

十六進制 字符串 c++ gb2 十進制 轉換 tails 表示 blog C/C++支持的是ASCII,不過漢字編碼中,GB2312與ASCII是兼容的,所以可以在C中獲得漢字的GB2312編碼 GB2312是兩個字節的,第一字節是高八位,第二字節是低八位,比如下面的程序

程式設計師有難題,怎麼辦?

拿程式設計師來說,想要在進階之路上成功完成以下三次飛躍,期間如果不加強自身的技術能力,就只能停滯不前。 第一次是進入公司,成為一顆專業的螺絲釘; 第二次是技術水平突飛猛進,成為專案的頂樑柱; 第三次是程式碼寫作一馬當先,成為業界的佼佼者 下面,我們來看下小王的故事。 程式猿進階需求急

Java程式設計師架構師其實並不難,關鍵在於選擇。

很多人做java開發2,3年後,都會感覺自己遇到瓶頸。什麼都會又什麼都不會,如何改變困境,為什麼很多人寫了7,8年還是一個碼農,工作中太多被動是因為不懂底層原理。公司的工作節奏又比較快,難有機會學習架構原理,也沒人教,所以這個時候,學習架構原理,擴充套件思維,對自己以後職業生涯尤為重要。 同樣公

C#(七)反射的應用

  反射在C#中的應用還是很多的,但它對程式碼的效能有一定影響。 反射的效能:   使用反射來呼叫型別或者觸發方法,或者訪問一個欄位或者屬性時clr 需要做更多的工作:校驗引數,檢查許可權等等,所以速度是非常慢的。所以儘量不要使用反射進行程式設計,對於打算編寫一個動態構造型別(晚繫結)的應用程

C++到Python,一個遊戲程序員的

分享圖片 國內 視頻資料 51cto 答疑 甚至有 帶來 一點 技術 我的第一份工作是一加國內知名遊戲公司的邏輯程序員,必須技能是C++,但是一開始只是寫語法和C++很類似的一種腳本(後來知道是從一個開源腳本引擎AngelScript修改而成的)。學習遊戲開發的流程,填數據

Java——從初級程式設計師到架構師

怎樣學習才能從一名Java初級程式設計師成長為一名合格的架構師,或者說一名合格的架構師應該有怎樣的技術知識體系,這是不僅一個剛剛踏入職場的初級程式設計師也是工作三五年之後開始迷茫的老程式設計師經常會問到的問題。希望這篇文章會是你看到過的最全面最權威的回答。 from:htt

Android程式設計師

本文主要論述的是Android程式設計師的進階之路,博主本人就是一名android開發攻城獅,所以這裡講述的大多數是android開發攻城獅的技術進階之路,如有問題請多指正。 大家都知道程式設計師之中有有菜鳥程式設計師和大神之分,這裡我這暫時把android程式設計師分為幾