程序員之路——學習技術的方法

轉載地址:http://www.cnblogs.com/13yan/archive/2012/12/08/2808212.html

迷茫的時候,總有點明你前進方向話。


相信作爲一個有追求的程序員,你一定有自己的一套學習方法,看書就是其中一種。

比如書不離身,坐公交,坐長途車,睡前牀邊,甚至是有遇到紅燈堵車都會拿起身邊的書讀上一兩句的。

而今天我想談談,我關於學習的看法。

 

有的觀衆看完導讀部分就會問了,樓主是什麼級別的猿,也敢來分享學習方法?

在進入正題之前,我想我有必要回答一下這個問題。

1、很久沒有更新博客了,本來我也沒有信心更新,因爲在技術的海洋裏,我總是覺得越努力,學習,越覺得自己的渺小。

但是身邊有個人一直鼓勵我,給我信心,告訴我其實已經做的很不錯了,我十分感動。

於是我覺得不該吝嗇自己的方法,因爲方法不寶貴,寶貴的是行動,和堅持行動。

2、最近園子裏有好多無聊而沒營養的話題,我覺得對許多童鞋是一種無形的傷害。

一會在說某某技術不如某某技術,意思就是說幹這個學這個沒前途,不如勸大家轉行。

一會在談職場那跳與不跳之間,或者是說做技術沒有做某某有前途。

這些信息在無形之中打擊我們的前進動力,而我希望有一股力量能與這股怨念抗衡。

我想說的是,我們是男人,不是怨婦,我們需要發揮力量,而不是抱怨聲。

3、我本覺得發出來意思不大,反正總有人誤解,或者保持反對意見,也肯定會被噴。

但是有個人鼓勵我,他說或許你發表的文章有人看了會有幫助呢。

也有人告訴我說,你已經蠻優秀了,就算是再優秀的人,也有人說不好,走自己的路讓別人去說吧。

 

選擇方向

選擇一個方向,選擇適合自己的職業,並做好職業規劃。我把它放在了第一條,因爲它很重要,是基礎,是方向標。

也是我開始學習的第一步,在我充滿動力開始買最好的書,看最好的老師的視頻,選最好的教材之前做的一件事情。

那是我畢業的那陣子,正思考着大學到底學了什麼?我到底該幹什麼?抱着這種迷茫,我在各行各業投遞了簡歷。

在等待面試通知的一段時間裏,我尋找着答案,我什麼都在瞭解,

瞭解企業管理,瞭解企業文化,瞭解如何做人,瞭解如何做事,瞭解如何賣一件產品,瞭解經濟是個什麼東西,如何去追女孩子。

我曾想過我能否當一名大師級的攝影師,也想過我能否做一個成功的生意人,也有想過我能否當一名歌手進入娛樂圈。

最後只因爲以前不懂事的時候說過的一句話,選擇了現在的職業。——“我要當高級程序員”

說話要算話麼,所以我做到了。就在我成爲一名普通程序員的時候,我的一個好友在我的QQ上貼上了架構師的標籤。

我覺得這個標籤很合適,所以一直就放着,目的也很明顯了。

有些事冥冥之中自有安排,你如果是這種人,就會走到這一步,不管是有意,還是無意,不管走了多少彎路,最終還是會走到這一步。

所以,有人說搞技術沒前途,不如做管理,不如做銷售,這種P話我壓根就沒相信過。

或者我會說,“你Y不早說,等我選好職業選好英雄了你才說有P用啊”。

所以,當你選擇好一個方向時,你的抗干擾能力會提高n的倍數,心也不會在這個花花世界裏到處遊蕩。

 

選擇行業

又是選擇,選擇是一個很重要的環節,解決了這個問題,後面學習道路就舒坦多了。

程序員這個職業很特殊,因爲軟件應用領域很廣泛。

所以軟件行業按職稱分又分爲嵌入式工程師,軟件設計師(高級程序員),系統架構師,系統分析師,項目管理規劃師,網絡規劃師,數據庫管理員。。。

按領域劃分,搞教育事業的,搞科學研究的,搞企業應用的,搞互聯網的,搞電子電路的,工業數控等。

這些領域所需要的知識結構和技術都有點差距的,選好了就不要輕易的換了,選好了就不要糾結了。

這樣你會少了很多煩惱,選好了做個決定。

所謂選擇比努力重要,意思不是說選了教育事業卻發現人家搞互聯網風生水起,就覺得選錯了要重新選。

而是說選擇了,再去努力,重新選擇努力白費。

打個比方,我們搞ERP開發,搞了幾年發現不就是CRUD,沒搞頭,不然搞網遊去吧,然後有些那邊的directX不懂,3D圖形不精,會設計ERP流程但不會設計RPG劇情,PHP/JSP/ASP等WEB開發技術多少要荒廢些,之前有很多努力白費。

就好像有的銷售是賣藥的,他的客戶不是藥店,就是經銷商。忽然去賣車了,銷售技巧和理念是相通的沒錯,但是之前辛苦建立的人脈就有損失了。

所以以前有人跟我說程序語言是相通的,會一種其他都會了,我問誰告訴你的,他說老師說的,我不爭論我笑了。

 

系統學習

如果你已經做好了選擇,那麼恭喜你,你一定能夠分辨出什麼對你是重要的,你的注意力會集中在一點,然後爆發。

在爆發之前還需要強化一些綜合的知識結構,不要什麼資料都在網上搜索,那樣太不繫統,久而久之會產生一種恐懼。

那新事物的恐懼,因爲你完全不知道它是從哪裏冒出來的,等它冒出來了以後你會覺得怎麼又一個新的名詞沒接觸過。

我先講個故事,以前羣,羣裏有個大神,大神被許多小菜膜拜,直到有一天,大神有所領悟,對一羣小菜說,“我現在才知道算法是多麼的重要,程序到底不外乎就是些算法。”,然後拋出各種算法名詞,於是一羣人就跟着學算法。

各位觀衆,能看出一些問題嗎?

程序(面向過程)=數據結構+算法;程序(面向對象)=對象+消息;

我表達的是,在這個園子裏,有的人會說算法很重要,有的人會反駁.Net裏面算法不太重要,到底重不重要?這個問題將搞得許多小鳥很糾結。

或許每天都有人拿出一個技術的名詞是你沒見過的,如果你沒有對計算機軟件有個大範圍的系統性地瞭解,是很容易在技術的海洋裏迷失方向的。

而跟讀大學課程,能夠讓你對計算機有個系統性的瞭解。

注意一下,有的人說大學裏學不到東西,有幾種可能性的:

1、自身問題,沒學,當然學不到東西。(每天就知道敗家和泡妞,沒有人生目標)

2、學校問題,師資差,教材差,氛圍差。(老師混口飯喫,教材接不上,C++語法都沒教,直接MFC來了誰學得會,或者乾脆北大青鳥教材當大學教材)

3、是學不到,學不到太多對工作直接有幫助的。(名牌大學,其實此人技術高超,由於大學基礎紮實,懂得原理,後面學Java比一般人輕鬆,比一般人快,但學校真沒教Java)

總結,蒐集好一點的學校的課程,有條件看國外的也行。懂得原理,將不再對新技術產生恐懼。

這裏推薦一些大綱:C/C++語法(以後有許多著名的書籍是用這個語言描述的,比如網絡編程、設計模式),C#/java(二選一,以後將會遇到許多著名的書籍用這個語言描述,學一種,另一種語法保證你看得懂),WEB開發(js,html,asp/php/jsp選一種瞭解一下Web開發原理和CGI的那點事),數據庫和數據庫原理(或許你有一天會接觸到分佈式事務,集羣,鎖的概念在其他領域也經常遇到,不太推薦用oracle來學習原理),嵌入式系統開發(被編入系統架構師大綱,瞭解一點沒什麼不好),軟件工程(涉及到一些面向設計方法學、面向過程的、項目管理),計算機網絡(5層協議,瞭解一下,以後WCF、socket等都用的是這些原理)

 

細化深化

經歷以上三步,堅持下來的一般都是人才了,有目標,有想法,有規劃,又受過高等教育。

在懂得原理的情況下,深入學習任何一方面應該都不難,但深入學習還是有方法的。

綜合提升等級,比如說你要深入研究數據庫,不要想一下子把數據庫研究到底,除非你的工作就只是研究數據庫。

因爲有了前面幾步做鋪墊,再根據吸引力法則,你自然而然會學得很深入。比如遇到一個問題,一個報表SQL語句查詢有3分鐘,那肯定需要調優了,你會從各種原理入手開始優化,表設計、索引類型、外鍵,約束,返回結果集、關係模型和非關係模型、條件、函數索引、分區、執行計劃、跟蹤,經過努力,報表終於查詢的速度終於可以接受了,但是在這個過程當中,你不止是用到數據庫。

還考慮到網絡傳輸,有的人說寫存儲過程減少網絡傳輸開銷,那又有什麼所謂,根據實際情況網絡環境,根據帶寬計算一下網絡傳輸的代價,內部局域網,還是英特網,局域網的話會產生多少廣播風暴,考慮併發性。如果情況允許的話可以多次操作數據庫。有些人還喜歡在存儲過程裏面寫業務邏輯,把業務邏輯層該做的事情都做了,結果程序中沒有業務邏輯,沒有業務對象,重用性很低。然後數據庫裏面存儲過程套存儲過程再套函數,想法是很好,只可惜用的是關係型數據庫,不是面向對象數據庫,這麼來有點過了。

爲了減少數據庫I/O的開銷,還用了服務器緩存,緩存、數據庫內存深入下去又是內存,到最後又是操作系統層面的東西了。

學了要用,書看了要做,做完要分享出來。看了書後,寫點Demo,想想應用場景,再應用到實踐當中,最後和朋友交流或者分享到博客。這樣纔是真的學到了,分享出來既鍛鍊語言組織能力和溝通能力,又可以保持一種狀態。

 

結束

關於學習,就討論到這裏。

等忙過一陣子後,我打算再寫點東西,一些用的到的東西。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章