當前位置:
首頁 > 最新 > 為什麼看懂了基礎語法但還是學不會編程?

為什麼看懂了基礎語法但還是學不會編程?

題圖:來自漂亮聰明可愛又能幹的理波特

為什麼看懂了基礎語法但還是學不會編程?

這個問題其實也是我自己學習過程困擾我自己很久的問題。我自己也是零基礎入門,一點點摸索,其間踩了很多的坑。通常表現為:我看了很多python零基礎入門的書和教程,彷彿我也會一些東西了。但是接下來要做些什麼,能做些什麼,我其實真的不知道。網上能搜集到的能做的事情,或者自己腦海中想做的事情,通常都非常遠大。但究竟要怎麼到那個地方去,心裡是真的不是很清楚。這其實是一個非常痛苦的問題,而且其實這個問題不僅僅局限於學習編程語言這一個領域:即通常所說的戰略和戰術的問題。我們不是戰術上不努力(是真的想學好編程),但是真的沒有一個戰略方針指導(不知道弄哪裡開始學,不知道自己學這些東西究竟有沒有用)。我們先來談談學習編程這一個具體的問題。現在我站在這個時間點回頭看,才體會到別人常說的,「一門編程語言,其實知道數據類型(int list dict)和控制結構(if for)之類的已經算是入門了。」那為什麼我們會了這些之後還是有不會的感覺呢?簡單的原因說是因為我們做的太少了。這可能並不是因為懶,而是真的不知道該做什麼。我自己也是自學出來的,知道那種不知道自己該幹啥能幹啥的痛苦。我以為自學和科班出身的最大區別在於,沒有了老師上課給你指引方向,你在做一件事情之前並不清楚諸多概念之間彼此的關係,就是說不清楚我學了這件事,接下來能做什麼,和前面我學的那麼多東西有什麼聯繫。如果不清楚這個聯繫,那麼肯定就會自我懷疑做的這件事是不是到底真的有用。那就會淺嘗輒止,止步不前。而老師的課堂中,雖然可能你沒有認真聽,也沒有做作業,但至少在老師課堂上的耳音耳音和同學下課後的的交流過程中,你知道我們學這個東西到底能幹啥。那麼在課後自己學的過程中自然就會有方向了。所以自學時候的問題並不在於缺乏一個好的老師,而是需要找一個簡單直白有實時反饋的方向。簡單直白意思就是說,我做這個東西沒有那麼多彎彎繞,不需要我理解那麼多生僻的概念就可直接上手,有實時反饋的意思就是說自己做一個東西出來最好有實施的反饋。其實最主要的是你自己要對這個方向感興趣,因為興趣可以幫你克服最開始階段的大片生僻概念給自己帶來而恐慌。舉一個我自己學習編程時候的例子吧。我最開始其實也陷入了一種誤區,買了一本唐浩強的《C語言編程》開始啃,啃了半天發現就是在一個黑窗口裡做一些我一眼就能看明白的數學題,覺得這件事情好無聊。就沒什麼動力繼續下去了。後來刷了很久的知乎別人說,python入門比較簡單一些,於是就轉了python。學習了基礎語法之後發現了我可以做爬蟲。後來發現爬蟲這個東西很有意思:我運行一下程序,我的本地文件就會立馬多出來一個新東西(爬取下來的文件或者圖片),可以立刻知道我寫的東西有沒有符合我的預期。進行了一些簡單的嘗試之後覺得這個東西好有意思:我可以用這個東西爬取好多美女圖片(你們永遠都想不到一個剛剛20歲的男生對成噸美女圖片的嚮往)以及把同學們QQ空間或者人人網裡的黑歷史全部都存下來,隨取隨黑。在這個過程中我接觸了python字元串的一些簡單的處理,正則表達式,一些簡單的網頁與伺服器端交互的GET和POST請求。當然我最終並沒有去爬QQ空間:因為後來理波特給我了一個她的活,要批量下載某一個數據。我說剛好這件事可以用爬蟲呀!於是就第一次寫了程序為別人做了點事,讓自己知道自己還是有點用的。這樣一來就覺得有意思了。比如你可以完全從爬蟲入手(我自己就是從爬蟲開始入門學python的),從簡單的開始做,比如可以寫一個最簡單的爬蟲,爬取一個簡單的頁面。然後一點點的加功能,不會了就在網上搜。別的不求,就求每天有一點進展,讓你有一些感性的認識,知道程序這個東西到底能幹啥。慢慢自己折騰的多了就會發現自己就可以做很多事情了!學習的思路大概是:先有一個最基礎的功能,然後一點點加新的特性和功能。剛開始當然可以去看別人的代碼,不過一定要弄明白別人的代碼每一行是什麼意思,返回的結果是什麼東西,這就相當於是你在學課本上的例題。每天有一點進展就最好了。一個完備的系統都是從最開始的小系統一點點成長起來的。不要怕慢,多去折騰,多去猜坑。其實我覺得寫程序也是一個非常需要經驗的崗位,經驗要如何得來呢?都是從坑中來的。可以給你提幾個方向的建議,搜索引擎上隨便搜搜就會有教程和demo。當你不知道做什麼的時候,可以照著已有的東西做一個類似的是一個不錯的辦法:

爬蟲。不需要登錄的(百度貼吧) -> 需要登錄的微博;從文字 -> 圖片等等

遊戲。飛機大戰,貪吃蛇,越是經典的遊戲其邏輯就越簡單。

做網頁。先做一個頁面 -> 博客 -> 給博客加一些功能(評論)

如果你是統計專業的,以前用R或者matlab做的事情可以換成python做。比如數據分析,演算法模型等等。

最重要的一點是,一定要看到自己做的東西是自己想要的,然後就會有那種掌控程序的快感。然後盡量把自己日常生活中的一些事務可以考慮用代碼完成,畢竟能用的東西才是最有價值的東西。這樣,你就基本上具有掌控自己的代碼能力,自然也就知道自己能幹啥了。有了一點代碼量之後可能就會發現,其實大部分的代碼都是在調別人寫好的包,所以代碼真的沒有那麼難,只要能記好API就好啦!我覺得對於不以代碼為生,單純想知道代碼能幹啥有什麼意思的人來說,能把自己生活中遇到的許多問題用代碼解決,已經很不錯了。對於那些想更進一步的同學,可能就會考慮效率的問題,比如同樣實現一個功能,為什麼一個方法比另一個方法可以快這麼多?為了寫出更高效率的程序(否則跑時間長點的任務耽誤的是自己的時間),你需要去看一點數據結構和演算法方面的知識了。最後給大家分享一個我老大說他是怎麼學習代碼的。老大是真正的大牛,大家可以學習一下。他說等你代碼掌握到了一定的程度,再學習一門新的語言的時候,其實就花上一個小時左右的時間熟悉一下這個語言的數據類型和控制結構等等基本語法。然後去把自己想的到的一些東西從頭實現一遍:比如鏈表,二叉樹,Kmeans(笑),寫一兩道演算法題。剛開始可以寫面向過程的,後面可以再用面向對象寫一遍。寫一遍完後再做做速度的優化。在這個過程中自然這門新的語言就會了。(嗯,好像很容易的樣子。)我覺得本質是一樣的:就是一定要去動手寫一些代碼。看是學不會一門新東西的,只有做了才行。你以為我只是在說學代碼么?


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 峰池 的精彩文章:

TAG:峰池 |