自學編程多久學到中等水平?
首先編程水平就是一個很難的定義。一般來說,我個人經過長期的自身學習和別人的交流總結出了兩種自學的路線,可供參考。
以目標為導向的實干型(針對非科班的同學)從某種角度講,編程是一種實踐。所謂的實踐,就是你去做一個事情,并且把它完成。那么如何去完成這件事呢?首先來說,你需要定義一個明確的目標,比如做一個個人網站,或者做一個小游戲。然后定義這個事情要做到多少才算完,比如個人網站需要做頁面展示,注冊;游戲的話,需要做一個比如橫板過關等等。
把上面的事情想清楚以后,就是選擇一門編程語言,你可以百度一下需要完成你目標的最佳語言,一般比如個人網站比較常用PHP,小游戲會用LUA等等。之后就是進行編程語言的學習,可以先進行基礎語法學習,學完以后,想辦法找一些例子或者項目,想盡一切辦法把他們跑起來,然后嘗試修改,這一切都是以實踐/完成目的為導向,中間如果遇到不懂再進行學習。
從無到有會是一個非常痛苦的過程,這個過程,需要一個人有極強的動手實踐能力和分析問題的能力,邊學邊做邊做邊學。一般來說,這個過程需要3個月全身心的投入去做,中間可能碰無數次釘子,踩無數坑,等過了這些釘子和坑,差不多就能具備簡單的動手能力。
以上的這套方法論,是總結不少我認識的非科班出身的程序員的經歷,他們沒正兒八經學過計算機科學,全憑個人興趣和極強的實踐能力去做事,最后的結果也非常不錯,因為編程是注重結果的,有了產品沒人在乎你是否是科班出身。
以理論為基礎的古典型編程雖然是一種實踐,但是它對理論的依賴又是極強的。你書中學到的任何知識,都有可能在實戰中碰到。對于想在編程領域長期耕耘,或者想把寫程序當成是一種一生愛好,或者想完成某些大型的較高難度的程序的同學,這種路線是我極力推薦的,但是也是收效最慢的。很多計算機專業的科班同學,也在這個漫長的學習過程中放棄了,從而轉去做了一些編程不相干事情。所以在選擇這個路線之前,最好想想自己能不能長期去啃計算機著作,去做很多數學題,編程題。下面我細說下這個路線。
首先,需要學習計算機科學的基礎課,先學習《計算機組成原理》,一般推薦看《深入理解計算機系統》
同時,在學習理論的過程中,學習C語言,注意C語言是計算機非常底層語言,即便以后工作用不到也對培養計算機編程思維有很大的幫助。注意C語言不止是學習,在學習過程中,需要配合上機,不然學成書呆子也沒用。
在理論,實踐的同時,還需要培養離散數學思維,那么推薦《離散數學及其應用》在看的同時完成課后練習。
一般來說,完成上面三本書的細致學習,需要6-12個月,學完之后可以進入后期進階的學習,《數據結構》,《操作系統》,《編譯原理》,《網絡基礎》,這些書籍大概也需要6-12個月看完,等這些書吃透了,基礎就非常夯實了。
基礎夯實以后,就需要學習目前業界流行的工具,比如 java php ,web編程相關,前端js,后端數據庫等技術,當你上面基礎打好以后,學習這些就會感覺比較輕松。
后記其實學編程,和學樂器是有相似的,第一種方式是速成式的,快速學會一首曲子,彈出來獲得滿足感和動力。后一種是通過長期的基礎訓練,成為能快速上手任何曲子的人。至于要選擇哪種,我覺得還是根據自身情況決定。