非計算機專業人員如何成為專業人員的學習之路
前兩天一兄弟給我打電話,他的問題是自己想好好學習計算機編程技術,但是自己想學的東西太多,不知道從何學起,而且學到的東西也在工作中無法用到。這也是我曾經遇到過的問題,因為我也不是計算機專業出身,所以今天我就說一些我對這個問題的看法。
我認為認識一個事物,首先要去了解這個事物的整體,然后再去研究它的內理。就像我們認識一座大樓,我們第一步要先從大樓的四周去看這個大樓的結構,第二步去看這個大樓內部的整體的支撐骨架,第三步才是去研究每一層的結構和房間部署。假如我們首先就從其內部細節開始研究,由于我們對這個事物的整個結構沒有了解,就很有可能在一個地方徘徊,可能就在大樓的一層中徘徊,根本就不知道樓上還有幾層,也不知道這個大樓的整體骨架,猶如盲人摸象,只能知道其中一部分。縱然最后認識清楚了,也需要耗費很多的時間,走很多彎路。
計算機專業的人從大學開始學習計算機相關知識,他們從《計算機原理》等這方面的書籍了解到最基礎的計算機硬件知識,然后再從《計算機操作系統》等書籍了解到整個操作系統的實現和編程環境,再進而通過《編譯原理》《計算機網絡》等書籍了解到計算機編程語言的原理和網絡原理,再進而學習各種我們平時用到的C, C++, Java等編程語言進行應用開發。他們將計算機基礎、網絡原理到計算機編程應用之間的整個知識體系都學習了一遍,所以他們在工作中遇到一些問題,就很容易解決,從而進步很快。還是拿大樓舉例子吧,他們是從大樓開始建的時候,打地基開始學起一直到大樓完工,所以他們會對這整個大樓的結構都很了解,縱然有些細節方面不是很清楚,在需要的時候花一點時間去看一下就好了。
綜上所述的結論是,計算機專業的人是將整個計算機相關專業的知識體系建立起來了,在這個基礎上再去發展學習,無往而不利。就像金庸小說中的張無忌練過九陽神功后再學其它武功后就能夠迅速的學會。
非計算機專業的人通過自學或者社會上的一些培訓機構學習到計算機編程這門技術,他們能通過編程語言開發出一些東西,能完成工作中的任務,當然一般都是工作在應用層。但是他們沒有對計算機專業知識進行過系統性的學習,對基礎知識缺乏了解,故在遇到一些非業務邏輯、牽扯到底層的一些東西的時候,他們就會茫然了。網絡通信的過程,編譯器的優化,數據結構的優化,多進程多線程編程等等,這些是他們所欠缺的。就像是蓋樓房,地基沒有打好就在上面開始加磚蓋墻,倒是必然的。這也是為什么有些非計算機專業的人很努力的去學習,學MySQL,學PHP,但是進步依然緩慢的原因。因為對計算機專業知識這所大樓的整體結構、整體骨架沒有了解,所以就找不到最合適的學習方法和學習路線,縱然付出很多時間,進步依然緩慢。
綜上所述的結論是,非計算機專業的人對這個計算機專業的知識體系沒有進行過系統的學習,對這個知識體系沒有了解,所以不知道該從何學起,學習進步很慢。就像一個建一個樓房,地基沒有打好,是沒有辦法壘高的,必然會倒。
下面說一下我的學習歷程吧,剛開始工作一年的時候,總想著完成工作才是目標,所以在遇到問題的時候就不斷的去問Google去問百度再不行就得問別人,反正一切以解決問題完成工作為目的,在這個不斷搜索不斷詢問的過程中,慢慢發現“地基”的概念,知道自己沒有基礎知識這塊,對知識缺乏系統性的學習。在第二年的時候,開始買書去學習MySQL數據庫原理,去學Linux操作系統,去學編譯原理。這個學習過程很是坎坷和經常間斷,這個過程就是我那個兄弟現在處于的一種情況,想學的東西很多,卻不知從何學起,而且花了很長時間去學習編譯原理,在工作中也不能用到,而且在學習過程中還有很多不知所云的東西,心情很是浮躁,一會學習Javascript一會學習編譯原理,一會學習Linux操作系統。這個過程持續了大概半年多,學習成果真的沒有多少,但是最大的收獲是我在這個工程中慢慢的對這個知識體系的認識慢慢清晰起來,慢慢的知道自己該學什么了,而且心情不是那么浮躁了,而且還明白了這個學習階段并不是一個短期工程,需要一個長時間的積累。這樣工作第二年的多半年就過去了。
然后,我開始計劃用兩年的時間將大學里計算機專業的學習書籍都看一遍,完成非專業向專業方向的轉變,之所以用兩年,是我在很好的完成我的工作之余才去干這件事,因為我覺得生存下去是最重要的,我不能不顧工作,而將大部分時間和經歷都放在學習上,工作不好,就會被淘汰,生存就是問題。所以我會在我很好的完成工作之余才去做這件增強自己能力的事情。我從《計算機組成原理》開始了解計算機相關的硬件和最基礎的知識,比如主板、CPU、CPU時間片、中斷等知識;而后從《計算機網絡》學習網絡通信過程,比如TCP、UPD、路由規則等網絡知識;而后從《計算機操作系統》學習進程調度,文件系統等系統環境知識;而后從《Linux操作系統》中學習Linux操作與系統知識;而后從《編譯原理》中學習編譯器的相關知識,學習到編程語言的運行原理;而后從《C程序設計》學習C語言知識,從《C++程序設計》中學習C++,學習C/C++語言是為了去學習一些用C/C++開發出的一些底層的軟件,比如分析Nginx源碼、PHP源碼等;而后從《數據結構》學習數據結構,如鏈表、堆棧、HashTable等;而后從《設計模式》中學習到那些以前不知所云的工廠模式、裝飾器模式等。這些知識雖然不多,但是這些方面的知識是整個計算機專業知識體系里面的最重要的幾部分。當學過這些知識后,我發現我對整個計算機專業相關的知識都清晰了很多,工作中對一些底層的東西也越來越清楚了。能夠跟運維一起商量操作服務器的一些設置,因為我學過操作系統,能夠跟PHP大牛去談PHP源碼的一些東西,因為我學過C/C++,看過源碼。
計劃用兩年,但其實一年都沒用了,就完成了我的兩年計劃。其實有些事情你去做的時候比你去想的時候要簡單,要快速。接下來,我會研究更多的開源東西,比如Hadoop大數據處理,Sphinx搜索引擎的內部實現,還有Linux的源代碼去更深的了解系統知識。回頭想想,其實學過的東西還是那么一點點,要學的東西還是那么多,不過,我現在是對計算機越來越感興趣了,由之前的謀生手段到現在的愛好,我知道我要去學什么,我知道我要去干什么了。
所以我要對跟我一樣不是專業出身的兄弟們說,每一份付出都是有收獲的,收獲遲早會來到你的面前。
書是人類進步的階梯,扎扎實實的去學吧,一步一個腳印的去學,不要浮躁,不要急功近利,慢慢的你就會發現自己在不斷的蛻變,可能用不了多長時間,你就是一個專業的人了。
推薦幾本書給大家,我覺得這幾本書是不錯的。
其他書籍:《把時間當做朋友》《暗時間》《人性的弱點》《四書道貫》
專業書籍:《計算機組成原理》《數據結構-使用c語言》《現代操作系統》《深入理解計算機系統》《計算機網絡》《編譯原理》《C程序設計》《C++程序設計》《設計模式》《程序員修煉之道》《鳥哥的Linux私房菜》《設計模式》《精通Linux C編程》《C Primer Plus》
留言列表