程序員的自我認知

摘要:你是一個程序員初哥,剛從大學邁進公司卻沒有人指導,要麼公司給你指定了導師,卻很差意思大事小情都問他。你想提升本身的編程水平,殊不知該如何下手。若是你想提高本身,成爲一個合格的每天向上的程序員,這篇文章就是爲你準備的。

  

  學什麼?

  有些人對什麼都感興趣,硬盤上存着幾百G的教學視頻電子書破解軟件,卻只是僅僅保存着,沒有轉化成知識。有些人只知道本身剛進公司的那點東 西,JDK必定要1.4.2,VC++必定要6.0,系統必定要Windows XP,不然就是大逆不道。前一種是不知道本身想要什麼,後一種是固步自封、眼界短淺,都不是一個程序員應該有的學習態度。html

  常見的程序員有Windows桌面開發,Linux服務器開發,Web前端開發,DB數據庫相關,遊戲服務器端開發,遊戲客戶端開發,RIA開 發 (如Flash、Silverlight),移動開發(這個如今最火了尤爲是Android和iOS),嵌入式開發,行業軟件開發等等,基本上我列舉的這 些已經涵蓋了大部分程序員類型,每一個類型都有不一樣的基礎知識以及擴展內容須要學習。另外有一些共通的內容如數據結構、基本算法、操做系統是都應該學習瞭解 的。前端

  另一種分法是按照編程語言區分,可是這個比較有侷限性,好比C程序員,通常是Linux服務器開發或者嵌入式,單純懂C語言是沒前途的。再好比PHP,就要對Web前端開發和服務器都有所涉及才能稱得上稱職。python

  在這裏還要多廢話一句,程序員相比其餘行業是一個須要不停學習的行當,固步自封馬上就落後,經驗值的累積速度會隨着年齡的增加而下降,這也是爲 什麼在國內不多看到50歲以上的程序員。至於架構師這個不少程序員指望的職業,個人見解是:若是架構師不寫代碼只會用PPT,只不過是一個大忽悠罷了。程序員

  我這篇文章只是介紹了一個方法,但願能幫助剛入門的朋友答疑解惑。根據這篇文章(怎樣練習一萬小時),若是你想獲得一個比較不錯的職業發展,長期不間斷的練習是絕對必須的。redis

  若是你的情商高於智商,很是擅長與人交往,那麼程序員不是合適你的職業,作其它任何行業都會獲得比程序員更好的結果。這也許有些偏激,但對於國內現狀就是這樣。十年之後,若是你仍是在作編程,比較一下你的同窗朋友就會知道我說的正不正確。 算法

  如何學?

  我下面介紹的學習都是關於技術,可是首先要說明的是,一個優秀的程序員一定要對英語有必定的掌握,應該有比較強的讀寫能力,另外最好有必定的據說能力。數據庫

  英語的學習如同技術學習同樣,必須鍥而不捨。好比天天都聽一篇 CNN Student News,泛聽一下Nightly News等等。在Apple iTunes上能夠免費訂閱大量Podcast,只要你堅持聽時時學,英語水平必定會提升。並且英文水平的提升會對你的職業帶來很是大的幫助。編程

  專精篇小程序

  不管什麼行業,若是想成爲專家,專精某個或者某幾個方面是必要的,好比我就一直標榜:Windows Visual C++程序員。這裏面就包含了Windows開發,Visual C++集成開發環境使用,C++程序員幾個方面。設計模式

  咱們用學習英語的辦法來講明如何專精「聽讀寫說」,就以一名C#程序員來舉例好了。

  1)聽看

  第一步是聽視頻或者看視頻。這是對某個方面知識快速瞭解的好辦法,由於視頻相比書籍文檔更精彩一些,並且花費的時間相對比較少,注意力更集中一些。

  在www.verycd.com上能夠看到大量的編程類培訓視頻,只要你想學的不是很是偏門均可以找到。也能夠在優酷上在線觀看。若是你對本身 的英文水平有自信,能夠到youtube.com上觀看英文的視頻。另外C#是微軟公司出品,微軟公司最大的特色就是不差錢,他們的免費視頻在網上均可以 找到。

  在verycd上搜索一下「C#」就能夠找到好幾頁,好比這個http://www.verycd.com/topics/2857178/ 《傳智播客.Net培訓視頻教程》,還有http://www.verycd.com/topics/2866044/ 《C#4.0中文視頻教程》均可如下載聽聽。

  2)讀

  讀是專精某個領域知識中最重要的一步,讀書、讀文檔、讀代碼都算是這部分。

  先說說讀書。讀書首先是選對書,選書也難也不難。若是你身邊有高人,能夠請教高人。若是感受沒有高人,那麼能夠參考china-pub的排行 榜,而後結合douban.com上的網友點評來選購,若是還沒頭緒,給我留言好了。計算機方面的書籍我建議選下面幾個出版社的:人民郵電(知名品牌是圖 靈)、 電子工業、機械工業、清華大學出版社、東南大學出版社。不能說他們出版的必定是精品,可是精品基本上都被這幾個出版社出了。好比C#方面,若是我選擇我會 選這一本做爲精讀——《C#與.NET3.5高級程序設計》

  精讀的書目不要多,一次應該限定在兩三本左右。讀書時應該備有如下工具:一個本子,一支熒光筆,一支簽字筆。本子用於記錄本身的心得體會,感受 比較精彩的內容能夠標記出來。另外應該按期把筆記總結到網上(好比google docs中)。爲何不直接總結成電子文檔呢?我的經驗以爲本子是最快捷也最不影響閱讀的記錄方式。若是你以爲轉成電子文檔麻煩,那我還有一絕招,就是直 接用數碼相機用微距模式拍照,而後保存圖片就行了。

  若是涉及到代碼,也應該把示例代碼的運行環境準備好,好比C#就須要安裝一下DotNet開發環境(好比Mono或者Visual Studio),學Java就應該安裝JDK,學C語言應該安裝一個gcc等等。

  精讀時應該儘可能理解每一個章節,章節後面若是有習題就應該把習題作完,而後再學後續內容。若是有相關示例代碼,也最好把代碼本身錄入而後調試運行 一 下。前面之因此提到選對書,就是由於若是你書選的有問題,那麼精度這一步就很難進行下去,翻譯的質量直接影響到你學習質量。精讀時的進度也不要太快,省得 本身理解不深。若是有可能,最好中英文比對一下(如今網絡上能夠搜到不少書的英文版ebook),這樣不只能夠學習英文,並且最重要的是一些中文中比較難 理解的,閱讀英文部分可能會容易看懂,這個好像有些難理解,可是就我我的翻譯的經驗,通常來講翻譯會把譯者的想法帶入,因此極可能形成一些歧義。

  精讀部分還包括讀文檔,由於不少比較新一些的知識尚未書籍,只有論文或者電子文檔,仍是建議把文檔打印出來閱讀。

  讀代碼也是很重要的一點,若是不是天才,那閱讀經典代碼就跟閱讀經典名著同樣,對於編程語言的學習是很是必要的。選擇一個好的閱讀項目跟選書同樣要精心,我建議先從比較精短的示例開始閱讀,好比微軟的C# code example或者像是www.codeproject.com上得分比較高的文章代碼。閱讀的代碼必定要選擇可實際運行的,這樣能夠在你感興趣或者有問題的地方加上斷點調試,觀察變量、調用棧等等變化。

  當掌握比較基本的知識之後,應該轉向選擇一些比較經典的開源項目。C#或者Java好的開源項目不少,這裏就很少說了。

  3)寫

  這裏的寫不是指前一步中寫寫書上的示例代碼,而是說把前面兩步學到的知識應用到實際項目中,這一步是最重要的。

  再增強說明一次,把學到的東西應用在本身的實際項目當中,無論項目大小,這一步是自學過程當中最重要的。

  跑題一下說說,我看到過不少培訓,內容很好,講的也不錯,可是最後收效甚微。問題不是講師的水平不夠,而是聽衆只是聽了,沒有用起來。光看是看不成高手的。

  有些朋友會問了,我真不知道寫什麼,能給點建議麼?個人建議是先從小應用開始,而後在寫一個比較實用的程序。

  什麼是小應用呢?好比我喜歡看網絡小說,就能夠編一個瀏覽器同樣的程序,打開之後它就直接訪問小說網站。或者喜歡炒股的,能夠編一個股票信息收 集, 把網上的股票信息抓取下來。或者有一些本身須要的功能,好比按期抓取屏幕存成圖片文件(這個對於測試人員比較有用),或者就是編一個程序它能夠播放視頻音 頻。小應用的意思是本身以爲好玩,功能上也不是很複雜,比較容易實現的。

  寫過一些小程序之後,有感受了,那就應該把學到的東西用到本身實際項目當中,好比我學Lua,就用Lua加Sqlite數據庫編寫了之前須要手 動實現的功能,也用Lua實現了對C++代碼的解析生成html幫助文檔。也許你工做項目未必須要這個知識,可是能夠在一些邊緣項目中使用,力爭多用多 寫,熟能生巧,編程其實就是手熟罷了。

  若是就是不知道該如何寫一個小程序,那麼有幾種可能,一個是你想的功能太複雜,這個好解決,另找一個題目就是了;另外一種多是你精讀的不夠,我 建議你把書再仔細讀一遍,把書上的例子好好再次寫寫;若是題目也不復雜,精讀也讀了,仍是不知如何下手,那勸你仍是換一個行當好了。三百六十行行行出狀 元,不是必定要作程序員這一行的。

  4)說

  說,就是分享。分享的過程其實也是提升的過程。

  通常來講,IT公司都有一個分享學習機制,程序員對本身專長的方向研究一段時間之後,整理成ppt,而後演示給你們看。也有一些興趣組好比 Python本地用戶組也有相似線下分享交流的機會。若是有這樣的機會,建議你們踊躍做爲講師參加。當你寫講稿或者演示的時候會忽然發現某些方面其實還很 薄弱,當聽衆提問交流的時候也會發現本身某些地方可能瞭解的不是那麼透徹,這其實也是在學習。分享不只僅鍛鍊口才,並且會給人你在這個領域比較精深的感 覺,並且從分享過程當中你會發現不少之前沒注意到的問題。

  分享也是推廣的過程,好比你看好C#語言,可是公司可能以爲沒有這方面人力或者瞭解不夠,你的傳道會讓你們對這方面知識瞭解的多一些,相關疑問也能夠找你來答疑,這樣也是提高人氣值的好辦法。

  廣博篇

  一個優秀的程序員,不只僅要有幾樣拿手的專業領域,還應該博彩衆家之長,瞭解一下軟件工程、架構設計等等方面的知識,還要及時跟蹤瞭解國內外技術動態。

  首先,應該像英語學習中的泛讀同樣,通讀一些感興趣的經典的書籍,好比《程序員修煉之道》《設計模式》《代碼大全》《深刻理解計算機系統》《快 速軟件開發》《Unix編程藝術》《編程珠璣》等等。這些書不像精讀書能夠馬上用到實際。可是這些經典書籍中的思想是能夠一直影響整個編程生涯。其實這些 書纔是真正值得精讀的。只不過沒辦法馬上見效,因此把它們做爲廣博篇中的提升級書目。

  選書必定要當心,爛書就跟老鼠屎,會噁心你很長時間而且下降你學習的積極性。如何選一本好書參考前面精讀部分。

  想了解技術動態,訂閱技術牛人的blog是很是重要的,好比我對redis很感興趣,因而就訂閱了redis做者antirez的博客,他有時 候會對一些項目中比較重要的設計作解讀。另外好比infoq.com,能夠訂閱他們的rss來跟蹤最新的文章。我建議你們申請一個google帳戶,使用 google reader做爲rss閱讀器。在google reader中訂閱很方便,直接加入博客地址就能夠了。

  想跟蹤最新潮最酷炫最流行最時尚的編程技術,下面幾個來源不可錯過。

  • 一個來源是reddit的programming討論區 http://www.reddit.com/r/programming/reddit的編程討論區很是活躍,基本上流行的博客文章內容都會被人提交到討論區,並且討論的質量也很高。

  這幾個來源更新很是快,基本上天天均可以看到上百條更新。我建議是不用每條都看,標題感興趣的看一看,或者發現同時在幾個源都出現的也能夠看看。天天有個二三十分鐘看完前面幾個新聞來源,對於新技術動態或者各類技術八卦那就是了如指掌了。

  若是你發現某個博客文章寫得質量很是高,建議你能夠訂閱這個博客,通常來說這樣的博客質量都是水準以上的。我大部分的技術博客都是這麼蒐集來的。

  另外如今博客上基本都有twitter地址,也能夠follow這些技術牛人的twitter,因爲推特的侷限,相比博客的學習價值要更低一些,可是交流的時效性比較高。

  郵件列表討論也是一種很不錯的討論方式(相比論壇而言),好比python-cn,toplanguage都是很好的中文技術類郵件討論組。

  關於廣博篇,原本還想展開一些,寫寫如何解決問題,可是這些內容在之前的博客中都有涉及。

相關文章
相關標籤/搜索