怎麼才能有效學好程式設計和程式碼
無論對於何種計算機程式語言,其核心程式設計思想都是一樣的。一起來看看吧!以下是小編分享給大家的學好程式設計和程式碼的方法,希望可以幫到你!
學好程式設計和程式碼的方法
一、多總結
多總結才能加深理解、增強記憶。舉例,Go 中有 slice、map、channal 型別,它們都可以用 make 生成例項,但 slice 和 map 還可以用以下形式初始化,也是程式設計規範中建議的初始化方式:
colors := map[string]string{}
slice := []int{}
但注意了,channal 則沒有這樣的語法:msg := chan string{}
上面兩句是生成例項,表示空集合,但下面兩句則表示例項不存在,值為 nil
var colors map[string]string
var slice []int
另外,結構體指標 slice 還可以象下面這樣初始化,結構體例項不用明確地指定型別***使用了型別推導***、不用明確地取地址運算***&***。
type Product struct {name stringprice float64}
products := []*Product{{"Spanner", 3.99}, {"Wrench", 2.49}, {"Screwdriver", 1.99}}
看到沒有,如果不經常總結,這一圈學下來會把你整的稀裡糊塗的。
二、多比較
學一門新語言一定要與你之前已經熟悉的語言經常作比較,找出它們的相同與不同,這樣才能加深記憶和理解,否則學完之後腦子裡會一片混亂,搞不清誰是誰非了。
就拿陣列來說吧,在 Java、Scala、Go 中定義、例項化、賦值是不一樣的。
//Java
int[] arr;//定義陣列,不可以指定陣列長度
arr = new int[5];//建立陣列物件***例項化***,指定陣列長度
arr[1] = 8;//賦值
//Scala
val arr = new Array[Int]***5*** //陣列在Scala裡用的是泛型類,建構函式引數指定陣列大小
arr***1*** = 8 //賦值,注意用的是括弧
//Go
arr := [5]int{} //建立陣列,初始化5個元素都為0,注意如果不指定陣列長度,則是另外一種型別Slice
arr[1] = 8 //賦值
再比如 Map 在 Scala 與 Go 語言裡定義、初始化、訪問也是不同的,作了以下比較後印象會非常深刻,把它們記下來,這樣以後使用就不會搞混了。
//Scala
val capital = Map***"France" -> "Paris", "Japan" -> "Tokyo"***
println***capital.get***"France"******
//Go
capital := map[string]string{"France": "Paris", "Japan": "Tokyo"}
fmt.Println***capital["France"]***
Go 同時給多個變數賦值在 Scala 裡可以用模式匹配做到,如下:
//Scala***使用樣本類的模式匹配***
case class Tao***name: String, age: Int***;
val Tao***myName, myAge*** = Tao***"taozs", 18***;
println***myName***
println***myAge***
//Go
myName, myAge := "taozs", 18
fmt.Println***myName***
fmt.Println***myAge***
//Scala***使用元組的模式匹配***
val ***myNumber, myString*** = ***123, "abe"***println***myNumber***println***myString***//GomyNumber, myString := 123, "abe"fmt.Println***myNumber***fmt.Println***myString***
除了在 Scala 和 Go 裡都可以型別推導外,在 Scala 裡還可以這樣定義函式:
//Scala
val increase = ***_: Int*** + 1
為方便自己將來隨時查閱,可以建立下面這樣的對比表格,描述不一定要求規範,自己能看懂就行。
三、轉變思維方式,
學會用這門語言去思考
學會用語言去思考是關鍵。如果你以前是學 C 的,轉學 Java,你一定要改變以前面向過程的思維,學會用面向物件的思維去分析問題;以前學 Java 的,轉學 Scala 則要學會用函式式的程式設計思維解決問題。
舉一個函數語言程式設計的例子,以下是 Java 語言常用的 for 迴圈,迴圈變數從 1 到 10 執行 10 次迴圈體:
// 指令式程式設計for ***int i = 1; i < 10; i++*** {// 此處是迴圈體做10次}
這被稱為指令式程式設計 ***Imperative Programming***,但學了 Scala 的函數語言程式設計 ***Functional Programming*** 後,解決同樣的問題,我們可以換一種思維:構建 1 到 10 的列表序列,針對列表中的每個元素分別執行函式,如下:
//函數語言程式設計
val autoList = ***1 to 10***.map***i => /*此處是函式體,針對1到10的每一個分別呼叫 1次*/***
已經習慣了 Java 程式設計的,對 Scala 的函數語言程式設計、樣本類、模式匹配、不可變物件、隱式轉換等需要一個逐步適應的過程,要漸漸學會用它們思考和解決問題。
再舉個 Scala 與 Go 思維方式不同的例子,要實現對一個字串裡的每個字元加 1 的操作,Scala 裡可以這樣:
"abc".map***cc => cc + 1***
"abc"是一個字串物件,呼叫它的方法 map,這是純面向物件的思維,但在 Go 裡就要轉變為面向過程的思維:
name := "abc"second := strings.Map***func***x rune*** rune {return x + 1}, name***
注意,這裡的 strings 是包 ***package***,呼叫它的公共函式 Map,被操作的物件 name 字串作為函式引數傳入。Go 提供的函式 len、cap、append、delete 等其實都是面向過程的,雖然 Go 也提供有面向物件的支援,已經習慣了面向物件程式設計的,剛開始學 Go 語言需要特別留意這一點。
四、多看開原始碼
學一門語言就是學一種思維方式,如今 GitHub 上可下載的開原始碼海量級,通過看別人的程式碼,學習別人是如何解決問題的,養成用該語言思考的習慣,另外還能學習到一些非常有用的技巧。
這個意思是指剛進入程式時執行 Start*** *** 函式,程式退出前呼叫 Stop*** *** 函式,非常好的技巧啊!可以用於需要在程式執行前和程式完成後分別執行一段邏輯的場景。再看 Start*** *** 函式是怎麼實現的:
func Start***options ...func****Profile****** interface {Stop******} {...return &prof}
該函式返回了一個實現了含有 Stop*** *** 函式介面的物件,如此才能在呼叫 Start 呼叫後連調 Stop。
五、優先學會使用程式碼分析工具
程式碼分析的工具包括靜態檢查、測試、測試覆蓋率分析、效能分析***記憶體、CPU***、除錯工具等,工具的價值在於它可以有效幫我們發現程式碼問題,這在我們剛開始學一門程式語言時意義尤其重大。
例如,以下這句 Java 賦值語句估計沒有哪本教科書會告訴你有效能問題:
String sb = new String***“Hello World”***;
以下這段 Java 程式碼你也不一定能意識到有多執行緒問題:
synchronized public void send***authuserPacket pkt, Thread t, String flowNo*** throws IOException
連線不可用,直接丟擲異常,等待接收執行緒連線伺服器成功
如果我們及時用 FindBugs 工具檢查就會發現上面這些問題,進而你會去分析研究為什麼,如此,你對這門語言的瞭解也會越來越多。
另外,Go 語言自帶的 vet/test/cover/pprof/trace 都是非常有用的工具,一邊學一邊使用這些工具分析程式碼,能加深對語言的理解。
六、多練習、多實踐
就象學自然語言一樣,如果只知道語法不去練是沒有任何效果的,只有反覆地練習,慢慢才能變成自己的一項技能。書本上的例子程式碼最好能從頭到尾親自敲一遍,多執行、多嘗試,另外再找一些題目來練習,如能有機會參與專案開發則更好啦,勤動手、勤實踐是最好的學習方法。
其它的方法還有:
做好筆記,把學習中遇到的關鍵點和自己的思考記下來,便於後面複習和對比;
複習,學習一定要重複、重複、再重複;
學習貴在堅持,每天學一點***比如堅持每天學 1 小時***,日積月累。
學好程式設計和程式碼的技巧
一、前期階段
前期的學習興趣引導至關重要,選擇自己感興趣的型別逐漸深入學習。
從嘗試多種不同的學習課程入手,找到最適合自己的學習方式和最讓自己感興趣的專案型別。剛開始你要思維開闊,不要理會那些告訴你應該學什麼的建議……在這個階段學什麼都是一樣的。
選擇一個程式設計專案,感覺它適合自己就要堅持學下去。完整學習整個入門教程,你會從中學到寫基礎指令碼和應用需要的所有基礎知識。接著,就要準備好開始建立工程。
二、中期階段
每個人都要經歷這個階段,因為成為一名開發者的唯一途徑就是不斷去開發。
如何過渡到獨立地建立工程,下面有三個建議:
1、和他人一起工作,哪怕同樣是菜鳥。
你會驚訝地發現,兩雙眼睛更容易調試出一個不可能的錯誤。
2、閱讀他人的程式碼,熟悉好的模式。
儘量理解為什麼作者這麼做。同樣的道理,不讀書是不會想成為一名小說家的,對吧?現在,請仔細注意其他人對任何小問題或工程提出的解決方案。
3、從小事做起,不斷嘗試。
對於將來,你應該想過做一些有趣的大工程,但你也必須適應除錯的過程,搜尋一些帶有小型挑戰的學習資源。經驗是無可替代的。
一旦適應了除錯過程,你還需要做好三點:
擁有一個強烈的目標想去實現,否則,什麼有趣但沒用的東西都學的話,最終不過瞎忙活一場。如果你在學習之外還有充裕的時間,請忽略這一條……
找到一條有效的路徑能直達你設定的目標,並且要驗證其可行性。你必須深入思考“這個方法到底能不能幫我實現目標?”
專注,避免分心。因為你如果是個對學習程式設計很有興趣的人,那你肯定也會對所有美妙的事情感興趣。當程式設計遇到了困難,你需要進一步解決這個問題,而不是另起爐灶。
如果能確定一條路並堅持走下去,你最終一定會進入到下一個階段,而不是花費了數月或數年,最終只是徒勞。
三、後期階段
成功的關鍵所在,注意自身技能的完善和提升。
這個階段是最棘手的過渡階段之一。儘管你能開發出應用程式,但你實際上想成為一名web開發人員。通過這個階段並找到工作,你需要做三件事情:
1、為程式設計尋找最佳實踐,並效仿。
你需要理解一個普通方案和最佳方案之間的差別。自己一味悶頭鑽研,遠遠比不上別人在真實工作環境下寫出的產品級程式碼,而最佳實踐樣例很好地體現了這其中的差距。
2、檢驗你的假設。
因為你可能迴避了一些自己知識體系中的漏洞,甚至你自己都不知道有這些漏洞的存在。你需要檢查並修復這些漏洞。
3、正確對待那些並不吸引人的技能。
儘管它們很少被強調,但是你要過渡到一個專業環境,它們還是相當重要的。這些技能包括測試、資料建模、架構和部署,我們很容易忽略它們,但它們都是優秀開發的基礎。
要做到上面這些並通過最後階段,關鍵是要不斷獲得他人的反饋。你需要和那些會懷疑你假設的人們一起學習工作,他們會提出尖銳的後續問題,並迫使你對自己的知識體系進行查缺補漏。
學好程式設計和程式碼的建議
01、讀>寫程式碼>讀>寫程式碼***日復一日***
關於如何高效學習程式設計我要給出的第一條建議是在閱讀程式碼和編寫程式碼之間迴圈往復。閱讀程式碼***書籍,部落格文章,開原始碼***將幫助你檢視解決方案,瞭解最佳做法,並大致瞭解語言或系統。但是在你這樣做之後,你需要自己實際去寫程式碼。可以是任何東西。可以是書本編碼練習或業餘專案,但確保你能將之付諸於實踐,並學會總結,歸納你學到的東西。
02、對答案的渴求
人類自然科學的發展史就是一個渴求得到答案的過程,即使只能知道答案的一小部分也值得我們去付出。只要你堅定信念,一定要找到問題的答案,你才會付出精力去探索,即使最後沒有得到答案,在過程中你也會學到很多東西。
03、不要怕陷入僵局,多請求幫忙
推薦三件事情:第一是試著總是閱讀更多關於你使用的技術,並總體掌握正在發生什麼。通常,當你陷入困境時,意味著你對需要澄清的事情做出了不正確的假設。第二是諮詢網際網路。這一點很顯然,但依然值得一提。在網上查詢並詢問有過這個問題的人是一個非常重要的技能。我的第三個建議是向你認識的人請求幫助。通常,你或許已經理解了技術,而且有了問題,但是你可能需要更高層次的上下文才能真正解開謎團。不要膽怯,大著膽子上前去問吧。
04、以專案促進學習
在我的經驗中,沒有什麼比做自己的小專案更有學習興趣了,更高效率了。有了一個點子並試圖實現這個點子是非常具有挑戰性的。它需要很強的自律心。但是,通過嘗試實際做一件事情,你可以學到如何分解問題並應用技術。你面對的各種問題,以及你如何解決它們才真正是所謂的程式設計。此外,想要完成專案的動力是繼續學習的動力。從專案獲得的滿足感遠遠超過你在抽象中學習東西的滿足感。
05、與其他程式設計師交談
學習程式設計的一個很好的方法就是和其他的程式設計師交談。不必談論任何特定的內容。可以是你正在學習的東西,可以是你認為很酷的東西,可以是你正在工作的東西,皆可。你會發現很多程式設計師並不喜歡只是聊程式設計。這樣做可能會讓你學到很多關於庫,服務,程式語言和模式方面的知識。但是,最重要的是,你將瞭解到其他人是如何看待程式設計的。你會發現,你認為理所當然或從來沒有考慮的事情在人與人之間是非常不同的。
1.學習程式設計需要的時間以及方法
2.程式語言用什麼方法學習
3.學習程式設計的時間以及方法
4.學習程式設計的方法
5.如何掌握程式設計的學習方法和技巧