# 【知識精講】如何學習編程
## Part1
很多同學在學習編程的過程中,都會遇到各式各樣的困難——這一方面是因為國內大部分學校的教材和教學方法都落后于時代,而另一方面,則是因為很多同學學習編程的方法,從根本上就是錯的。
很多同學像是學其他的某些課程一樣,上課聽講,課后帶著課本和習題手冊去圖書館或者自習室,一邊看書一邊在紙上做一些題——看似十分努力,但是這樣的努力換來的卻只是通過考試(而且一般情況下還是放了水的考試)的能力,真的要寫程序的話,恐怕連最簡單的 Hello World 都寫不出來。
## Part2
大家必須要明白一點——**計算機科學是知識,而編程則是一種技能**。我們從小到大,在學校里的“學習”,都是學習知識——這個流程大家已經很熟悉了:課前看書預習,上課聽講,下課做作業,然后復習考試。
然而學習技能,并不是這么學的——舉個簡單的例子,有的同學可能學過游泳,那么學游泳的時候,需要正襟危坐地坐在教室里,課前預習上課聽講嗎?顯然不是,不管是游泳培訓班,還是大學體育課的游泳選修課,上課地點都是在游泳池里而不是教室,學習的方法都是通過模仿來進行大量的實際練習;再比如彈琴,學鋼琴一定要有鋼琴,一定要大量的練習,并且練習的時間遠遠大于學習樂理知識的時間——有些理想遠大的琴童,從小到大的練琴時間,甚至可以用“慘無人道”來形容。
## Part3
現在大家有點明白了吧?還是那句話,大家一定不要把編程看作知識,**計算機科學是知識,但是編程是技能**。既然是技能,就要用學技能的思路去學習。
學習技能的正確思路,應該是以動手練習為主,看書學習為輔——事實上最初學習的時候我們壓根就不需要教材的。而練習的過程也一定要循序漸進,每次都只向前邁一步,小步快跑著前進。舉個簡單的例子——對于這門課程,我們先從最基本的 Hello World 入手,培養最初的編程習慣,然后再進一步地學習變量、輸入輸出、選擇結構和循環結構等語法要素,接下來熟悉面向對象編程思想、數組與指針等高級特性,以及一些基本的數據結構與算法知識……
## Part4
在此基礎上,你需要循序漸進地做大量的編程練習——**就算是一句一句地抄,也一定要親自動手寫代碼**。當同學們在系統的引導下寫完一個完整的程序的時候,不光會產生強烈的成就感和自信心,寫代碼的熟練程度也會有相當程度的提升。
不過,只有伴隨課同樣也是不夠的——你需要做大量的練習。這門課程中包括了大量的編程作業,你必須要完成這些作業,拿到足以通過的分數才能完成這門課的學習。考慮到同學們完成這門課程時所擁有的編程基礎,大家可以先做帶有“簡單題”標簽的題目,等到學習了更多的數據結構與算法知識之后,再去做難度更高的題。
## Part5
除此之外,同學們還一定要注意——**雖然自學能力很重要,但是自學并不能解決一切問題。** 所以有條件的話,大家最好能在現實中找一個“老司機”帶路——這樣可以節省大量時間,少走很多彎路。當然,現實中大家很可能并不具有這樣的條件——所以退而求其次,**一定要學會通過搜索引擎查找答案** ,并且最好能讓自己具備接入 Google 的網絡條件。
- 教材介紹
- 《編程初學入門常識》
- 什么是程序語言
- 【知識精講】編程與編程語言
- 【選擇測試】編程語言分類
- 【知識精講】高級語言分類
- 【選擇測試】編譯與解釋
- 【選擇測試】程序員笑話-Java
- 熟悉鍵盤上用于編程的鍵位
- 【知識精講】認識你的鍵盤
- 【知識精講】中文和英文字符
- 【匹配測試】識別中英文符號
- 【選擇測試】中英文符號的影響
- 【伴隨編程】不要使用中文引號
- 【伴隨編程】不要使用中文分號
- 【伴隨編程】正確地輸入符號
- 【選擇測試】找出程序中的錯誤
- 初始工程師思維
- 【知識精講】二進制思想
- 【選擇測試】程序員笑話-湊整
- 【知識精講】閉合的邏輯
- 【選擇測試】程序員笑話-條件
- 程序員職業與生活
- 【知識精講】程序員的發展方向
- 【知識精講】程序員的裝備
- 【知識精講】程序員的健康
- 【選擇測試】做一名健康的程序員
- 《C++程序設計》
- 前言
- 【知識精講】編程與計算機科學
- 【知識精講】編程與軟件工程
- 【知識精講】如何學習編程
- 你好C++
- 【知識精講】你好,C++
- 【知識精講】C++程序是如何開發的
- 【知識精講】成為一名Power User
- 【伴隨編程】讓我們一起說你好
- 【知識精講】你的第一個C++語言程序
- 【伴隨命令】編譯、運行你的程序
- 【伴隨編程】將變量流式輸出
- 【選擇測試】變量的作用域
- 【知識精講】變量與數據類型
- 【匹配測試】C++語言的入門概念
- 【知識精講】在程序中學會換行
- 【選擇測試】正確地換行
- 簡單數學運算
- 【知識精講】重新認識基本運算
- 【選擇測試】運算符的理解
- 【伴隨編程】做一下簡單的運算
- 【伴隨編程】a 的 n 次方
- 【知識精講】數學函數
- 【伴隨編程】讓C++語言變成計算器
- 【伴隨編程】計算球的體積
- 【匹配測試】數學世界知多少
- 【知識精講】在程序中添加注釋
- 【選擇測試】正確地寫注釋
- 從伴隨輸入到變量地址
- 【伴隨編程】 一個數字復讀機器
- 【選擇測試】理解標準輸入輸出
- 【伴隨編程】一個加法計算器
- 【程序設計】A+B+C問題
- 【伴隨編程】簡單的I/O格式控制
- 【知識精講】地址與取地址符
- 【伴隨編程】看看我們的地址
- 習題一:面積與周長
- 【程序設計】矩形面積與周長
- 【程序設計】三角形面積與周長
- 【程序設計】圓形面積與周長
- 程序中的是與非
- 【知識精講】是非的表示與關系運算
- 【伴隨編程】驗一驗關系運算式
- 【選擇測試】關系運算式求值
- 【知識精講】如果的意義
- 【伴隨編程】分段函數求值
- 【知識精講】如果之后的如果
- 【伴隨編程】五則運算器
- 【選擇測試】分支的嵌套
- 【伴隨編程】問號表達式
- 【知識精講】是非之間的邏輯組合
- 【伴隨編程】判斷閏年
- 【程序設計】日期合法性
- 【知識精講】多路順序結構
- 【知識精講】在程序中學會縮進
- 【選擇測試】正確的縮進
- C++程序中的苦力
- 【知識精講】使用循環結構
- 【選擇測試】對比兩種循環
- 【伴隨編程】使用while循環
- 【填空測試】理解循環結構
- 【知識精講】自減和自增運算符
- 【伴隨編程】使用自增運算符
- 【知識精講】for循環
- 【選擇測試】for循環的使用
- 【程序設計】一大波好玩兒的程序
- 《代碼能力快速提升》
- 《基礎數據結構》
- 《搜索入門》
- 《動態規劃基礎》
- 《數論和基礎數學》
- 《圖和數基礎》