亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦 > 學(xué)習(xí)方法 > 通用學(xué)習(xí)方法 > 學(xué)習(xí)態(tài)度 > 怎么才能有效學(xué)好編程和代碼

      怎么才能有效學(xué)好編程和代碼

      時(shí)間: 欣怡1112 分享

      怎么才能有效學(xué)好編程和代碼

        無(wú)論對(duì)于何種計(jì)算機(jī)編程語(yǔ)言,其核心編程思想都是一樣的。一起來(lái)看看怎么才能有效學(xué)好編程和代碼吧!以下是學(xué)習(xí)啦小編分享給大家的學(xué)好編程和代碼的方法,希望可以幫到你!

        學(xué)好編程和代碼的方法

        一、多總結(jié)

        多總結(jié)才能加深理解、增強(qiáng)記憶。舉例,Go 中有 slice、map、channal 類(lèi)型,它們都可以用 make 生成實(shí)例,但 slice 和 map 還可以用以下形式初始化,也是編程規(guī)范中建議的初始化方式:

        colors := map[string]string{}

        slice := []int{}

        但注意了,channal 則沒(méi)有這樣的語(yǔ)法:msg := chan string{}

        上面兩句是生成實(shí)例,表示空集合,但下面兩句則表示實(shí)例不存在,值為 nil

        var colors map[string]string

        var slice []int

        另外,結(jié)構(gòu)體指針 slice 還可以象下面這樣初始化,結(jié)構(gòu)體實(shí)例不用明確地指定類(lèi)型(使用了類(lèi)型推導(dǎo))、不用明確地取地址運(yùn)算(&)。

        type Product struct {name stringprice float64}

        products := []*Product{{"Spanner", 3.99}, {"Wrench", 2.49}, {"Screwdriver", 1.99}}

        看到?jīng)]有,如果不經(jīng)??偨Y(jié),這一圈學(xué)下來(lái)會(huì)把你整的稀里糊涂的。

        二、多比較

        學(xué)一門(mén)新語(yǔ)言一定要與你之前已經(jīng)熟悉的語(yǔ)言經(jīng)常作比較,找出它們的相同與不同,這樣才能加深記憶和理解,否則學(xué)完之后腦子里會(huì)一片混亂,搞不清誰(shuí)是誰(shuí)非了。

        就拿數(shù)組來(lái)說(shuō)吧,在 Java、Scala、Go 中定義、實(shí)例化、賦值是不一樣的。

        //Java

        int[] arr;//定義數(shù)組,不可以指定數(shù)組長(zhǎng)度

        arr = new int[5];//創(chuàng)建數(shù)組對(duì)象(實(shí)例化),指定數(shù)組長(zhǎng)度

        arr[1] = 8;//賦值

        //Scala

        val arr = new Array[Int](5) //數(shù)組在Scala里用的是泛型類(lèi),構(gòu)造函數(shù)參數(shù)指定數(shù)組大小

        arr(1) = 8 //賦值,注意用的是括弧

        //Go

        arr := [5]int{} //創(chuàng)建數(shù)組,初始化5個(gè)元素都為0,注意如果不指定數(shù)組長(zhǎng)度,則是另外一種類(lèi)型Slice

        arr[1] = 8 //賦值

        再比如 Map 在 Scala 與 Go 語(yǔ)言里定義、初始化、訪(fǎng)問(wèn)也是不同的,作了以下比較后印象會(huì)非常深刻,把它們記下來(lái),這樣以后使用就不會(huì)搞混了。

        //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 同時(shí)給多個(gè)變量賦值在 Scala 里可以用模式匹配做到,如下:

        //Scala(使用樣本類(lèi)的模式匹配)

        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 里都可以類(lèi)型推導(dǎo)外,在 Scala 里還可以這樣定義函數(shù):

        //Scala

        val increase = (_: Int) + 1

        為方便自己將來(lái)隨時(shí)查閱,可以建立下面這樣的對(duì)比表格,描述不一定要求規(guī)范,自己能看懂就行。

        三、轉(zhuǎn)變思維方式,

        學(xué)會(huì)用這門(mén)語(yǔ)言去思考

        學(xué)會(huì)用語(yǔ)言去思考是關(guān)鍵。如果你以前是學(xué) C 的,轉(zhuǎn)學(xué) Java,你一定要改變以前面向過(guò)程的思維,學(xué)會(huì)用面向?qū)ο蟮乃季S去分析問(wèn)題;以前學(xué) Java 的,轉(zhuǎn)學(xué) Scala 則要學(xué)會(huì)用函數(shù)式的編程思維解決問(wèn)題。

        舉一個(gè)函數(shù)式編程的例子,以下是 Java 語(yǔ)言常用的 for 循環(huán),循環(huán)變量從 1 到 10 執(zhí)行 10 次循環(huán)體:

        // 命令式編程for (int i = 1; i < 10; i++) {// 此處是循環(huán)體做10次}

        這被稱(chēng)為命令式編程 (Imperative Programming),但學(xué)了 Scala 的函數(shù)式編程 (Functional Programming) 后,解決同樣的問(wèn)題,我們可以換一種思維:構(gòu)建 1 到 10 的列表序列,針對(duì)列表中的每個(gè)元素分別執(zhí)行函數(shù),如下:

        //函數(shù)式編程

        val autoList = (1 to 10).map(i => /*此處是函數(shù)體,針對(duì)1到10的每一個(gè)分別調(diào)用 1次*/)

        已經(jīng)習(xí)慣了 Java 編程的,對(duì) Scala 的函數(shù)式編程、樣本類(lèi)、模式匹配、不可變對(duì)象、隱式轉(zhuǎn)換等需要一個(gè)逐步適應(yīng)的過(guò)程,要漸漸學(xué)會(huì)用它們思考和解決問(wèn)題。

        再舉個(gè) Scala 與 Go 思維方式不同的例子,要實(shí)現(xiàn)對(duì)一個(gè)字符串里的每個(gè)字符加 1 的操作,Scala 里可以這樣:

        "abc".map(cc => cc + 1)

        "abc"是一個(gè)字符串對(duì)象,調(diào)用它的方法 map,這是純面向?qū)ο蟮乃季S,但在 Go 里就要轉(zhuǎn)變?yōu)槊嫦蜻^(guò)程的思維:

        name := "abc"second := strings.Map(func(x rune) rune {return x + 1}, name)

        注意,這里的 strings 是包 (package),調(diào)用它的公共函數(shù) Map,被操作的對(duì)象 name 字符串作為函數(shù)參數(shù)傳入。Go 提供的函數(shù) len、cap、append、delete 等其實(shí)都是面向過(guò)程的,雖然 Go 也提供有面向?qū)ο蟮闹С郑呀?jīng)習(xí)慣了面向?qū)ο缶幊痰?,剛開(kāi)始學(xué) Go 語(yǔ)言需要特別留意這一點(diǎn)。

        四、多看開(kāi)源代碼

        學(xué)一門(mén)語(yǔ)言就是學(xué)一種思維方式,如今 GitHub 上可下載的開(kāi)源代碼海量級(jí),通過(guò)看別人的代碼,學(xué)習(xí)別人是如何解決問(wèn)題的,養(yǎng)成用該語(yǔ)言思考的習(xí)慣,另外還能學(xué)習(xí)到一些非常有用的技巧。

        這個(gè)意思是指剛進(jìn)入程序時(shí)執(zhí)行 Start( ) 函數(shù),程序退出前調(diào)用 Stop( ) 函數(shù),非常好的技巧啊!可以用于需要在程序執(zhí)行前和程序完成后分別執(zhí)行一段邏輯的場(chǎng)景。再看 Start( ) 函數(shù)是怎么實(shí)現(xiàn)的:

        func Start(options ...func(*Profile)) interface {Stop()} {...return &prof}

        該函數(shù)返回了一個(gè)實(shí)現(xiàn)了含有 Stop( ) 函數(shù)接口的對(duì)象,如此才能在調(diào)用 Start 調(diào)用后連調(diào) Stop。

        五、優(yōu)先學(xué)會(huì)使用代碼分析工具

        代碼分析的工具包括靜態(tài)檢查、測(cè)試、測(cè)試覆蓋率分析、性能分析(內(nèi)存、CPU)、調(diào)試工具等,工具的價(jià)值在于它可以有效幫我們發(fā)現(xiàn)代碼問(wèn)題,這在我們剛開(kāi)始學(xué)一門(mén)編程語(yǔ)言時(shí)意義尤其重大。

        例如,以下這句 Java 賦值語(yǔ)句估計(jì)沒(méi)有哪本教科書(shū)會(huì)告訴你有性能問(wèn)題:

        String sb = new String(“Hello World”);

        以下這段 Java 代碼你也不一定能意識(shí)到有多線(xiàn)程問(wèn)題:

        synchronized public void send(authuserPacket pkt, Thread t, String flowNo) throws IOException

        連接不可用,直接拋出異常,等待接收線(xiàn)程連接服務(wù)器成功

        如果我們及時(shí)用 FindBugs 工具檢查就會(huì)發(fā)現(xiàn)上面這些問(wèn)題,進(jìn)而你會(huì)去分析研究為什么,如此,你對(duì)這門(mén)語(yǔ)言的了解也會(huì)越來(lái)越多。

        另外,Go 語(yǔ)言自帶的 vet/test/cover/pprof/trace 都是非常有用的工具,一邊學(xué)一邊使用這些工具分析代碼,能加深對(duì)語(yǔ)言的理解。

        六、多練習(xí)、多實(shí)踐

        就象學(xué)自然語(yǔ)言一樣,如果只知道語(yǔ)法不去練是沒(méi)有任何效果的,只有反復(fù)地練習(xí),慢慢才能變成自己的一項(xiàng)技能。書(shū)本上的例子代碼最好能從頭到尾親自敲一遍,多運(yùn)行、多嘗試,另外再找一些題目來(lái)練習(xí),如能有機(jī)會(huì)參與項(xiàng)目開(kāi)發(fā)則更好啦,勤動(dòng)手、勤實(shí)踐是最好的學(xué)習(xí)方法。

        其它的方法還有:

        做好筆記,把學(xué)習(xí)中遇到的關(guān)鍵點(diǎn)和自己的思考記下來(lái),便于后面復(fù)習(xí)和對(duì)比;

        復(fù)習(xí),學(xué)習(xí)一定要重復(fù)、重復(fù)、再重復(fù);

        學(xué)習(xí)貴在堅(jiān)持,每天學(xué)一點(diǎn)(比如堅(jiān)持每天學(xué) 1 小時(shí)),日積月累。

        學(xué)好編程和代碼的技巧

        一、前期階段

        前期的學(xué)習(xí)興趣引導(dǎo)至關(guān)重要,選擇自己感興趣的類(lèi)型逐漸深入學(xué)習(xí)。

        從嘗試多種不同的學(xué)習(xí)課程入手,找到最適合自己的學(xué)習(xí)方式和最讓自己感興趣的項(xiàng)目類(lèi)型。剛開(kāi)始你要思維開(kāi)闊,不要理會(huì)那些告訴你應(yīng)該學(xué)什么的建議……在這個(gè)階段學(xué)什么都是一樣的。

        選擇一個(gè)編程項(xiàng)目,感覺(jué)它適合自己就要堅(jiān)持學(xué)下去。完整學(xué)習(xí)整個(gè)入門(mén)教程,你會(huì)從中學(xué)到寫(xiě)基礎(chǔ)腳本和應(yīng)用需要的所有基礎(chǔ)知識(shí)。接著,就要準(zhǔn)備好開(kāi)始創(chuàng)建工程。

        二、中期階段

        每個(gè)人都要經(jīng)歷這個(gè)階段,因?yàn)槌蔀橐幻_(kāi)發(fā)者的唯一途徑就是不斷去開(kāi)發(fā)。

        如何過(guò)渡到獨(dú)立地創(chuàng)建工程,下面有三個(gè)建議:

        1、和他人一起工作,哪怕同樣是菜鳥(niǎo)。

        你會(huì)驚訝地發(fā)現(xiàn),兩雙眼睛更容易調(diào)試出一個(gè)不可能的錯(cuò)誤。

        2、閱讀他人的代碼,熟悉好的模式。

        盡量理解為什么作者這么做。同樣的道理,不讀書(shū)是不會(huì)想成為一名小說(shuō)家的,對(duì)吧?現(xiàn)在,請(qǐng)仔細(xì)注意其他人對(duì)任何小問(wèn)題或工程提出的解決方案。

        3、從小事做起,不斷嘗試。

        對(duì)于將來(lái),你應(yīng)該想過(guò)做一些有趣的大工程,但你也必須適應(yīng)調(diào)試的過(guò)程,搜索一些帶有小型挑戰(zhàn)的學(xué)習(xí)資源。經(jīng)驗(yàn)是無(wú)可替代的。

        一旦適應(yīng)了調(diào)試過(guò)程,你還需要做好三點(diǎn):

        擁有一個(gè)強(qiáng)烈的目標(biāo)想去實(shí)現(xiàn),否則,什么有趣但沒(méi)用的東西都學(xué)的話(huà),最終不過(guò)瞎忙活一場(chǎng)。如果你在學(xué)習(xí)之外還有充裕的時(shí)間,請(qǐng)忽略這一條……

        找到一條有效的路徑能直達(dá)你設(shè)定的目標(biāo),并且要驗(yàn)證其可行性。你必須深入思考“這個(gè)方法到底能不能幫我實(shí)現(xiàn)目標(biāo)?”

        專(zhuān)注,避免分心。因?yàn)槟闳绻莻€(gè)對(duì)學(xué)習(xí)編程很有興趣的人,那你肯定也會(huì)對(duì)所有美妙的事情感興趣。當(dāng)編程遇到了困難,你需要進(jìn)一步解決這個(gè)問(wèn)題,而不是另起爐灶。

        如果能確定一條路并堅(jiān)持走下去,你最終一定會(huì)進(jìn)入到下一個(gè)階段,而不是花費(fèi)了數(shù)月或數(shù)年,最終只是徒勞。

        三、后期階段

        成功的關(guān)鍵所在,注意自身技能的完善和提升。

        這個(gè)階段是最棘手的過(guò)渡階段之一。盡管你能開(kāi)發(fā)出應(yīng)用程序,但你實(shí)際上想成為一名web開(kāi)發(fā)人員。通過(guò)這個(gè)階段并找到工作,你需要做三件事情:

        1、為編程尋找最佳實(shí)踐,并效仿。

        你需要理解一個(gè)普通方案和最佳方案之間的差別。自己一味悶頭鉆研,遠(yuǎn)遠(yuǎn)比不上別人在真實(shí)工作環(huán)境下寫(xiě)出的產(chǎn)品級(jí)代碼,而最佳實(shí)踐樣例很好地體現(xiàn)了這其中的差距。

        2、檢驗(yàn)?zāi)愕募僭O(shè)。

        因?yàn)槟憧赡芑乇芰艘恍┳约褐R(shí)體系中的漏洞,甚至你自己都不知道有這些漏洞的存在。你需要檢查并修復(fù)這些漏洞。

        3、正確對(duì)待那些并不吸引人的技能。

        盡管它們很少被強(qiáng)調(diào),但是你要過(guò)渡到一個(gè)專(zhuān)業(yè)環(huán)境,它們還是相當(dāng)重要的。這些技能包括測(cè)試、數(shù)據(jù)建模、架構(gòu)和部署,我們很容易忽略它們,但它們都是優(yōu)秀開(kāi)發(fā)的基礎(chǔ)。

        要做到上面這些并通過(guò)最后階段,關(guān)鍵是要不斷獲得他人的反饋。你需要和那些會(huì)懷疑你假設(shè)的人們一起學(xué)習(xí)工作,他們會(huì)提出尖銳的后續(xù)問(wèn)題,并迫使你對(duì)自己的知識(shí)體系進(jìn)行查缺補(bǔ)漏。

        學(xué)好編程和代碼的建議

        01、讀>寫(xiě)代碼>讀>寫(xiě)代碼(日復(fù)一日)

        關(guān)于如何高效學(xué)習(xí)編程我要給出的第一條建議是在閱讀代碼和編寫(xiě)代碼之間循環(huán)往復(fù)。閱讀代碼(書(shū)籍,博客文章,開(kāi)源代碼)將幫助你查看解決方案,了解最佳做法,并大致了解語(yǔ)言或系統(tǒng)。但是在你這樣做之后,你需要自己實(shí)際去寫(xiě)代碼??梢允侨魏螙|西??梢允菚?shū)本編碼練習(xí)或業(yè)余項(xiàng)目,但確保你能將之付諸于實(shí)踐,并學(xué)會(huì)總結(jié),歸納你學(xué)到的東西。

        02、對(duì)答案的渴求

        人類(lèi)自然科學(xué)的發(fā)展史就是一個(gè)渴求得到答案的過(guò)程,即使只能知道答案的一小部分也值得我們?nèi)ジ冻?。只要你?jiān)定信念,一定要找到問(wèn)題的答案,你才會(huì)付出精力去探索,即使最后沒(méi)有得到答案,在過(guò)程中你也會(huì)學(xué)到很多東西。

        03、不要怕陷入僵局,多請(qǐng)求幫忙

        推薦三件事情:第一是試著總是閱讀更多關(guān)于你使用的技術(shù),并總體掌握正在發(fā)生什么。通常,當(dāng)你陷入困境時(shí),意味著你對(duì)需要澄清的事情做出了不正確的假設(shè)。第二是咨詢(xún)互聯(lián)網(wǎng)。這一點(diǎn)很顯然,但依然值得一提。在網(wǎng)上查找并詢(xún)問(wèn)有過(guò)這個(gè)問(wèn)題的人是一個(gè)非常重要的技能。我的第三個(gè)建議是向你認(rèn)識(shí)的人請(qǐng)求幫助。通常,你或許已經(jīng)理解了技術(shù),而且有了問(wèn)題,但是你可能需要更高層次的上下文才能真正解開(kāi)謎團(tuán)。不要膽怯,大著膽子上前去問(wèn)吧。

        04、以項(xiàng)目促進(jìn)學(xué)習(xí)

        在我的經(jīng)驗(yàn)中,沒(méi)有什么比做自己的小項(xiàng)目更有學(xué)習(xí)興趣了,更高效率了。有了一個(gè)點(diǎn)子并試圖實(shí)現(xiàn)這個(gè)點(diǎn)子是非常具有挑戰(zhàn)性的。它需要很強(qiáng)的自律心。但是,通過(guò)嘗試實(shí)際做一件事情,你可以學(xué)到如何分解問(wèn)題并應(yīng)用技術(shù)。你面對(duì)的各種問(wèn)題,以及你如何解決它們才真正是所謂的編程。此外,想要完成項(xiàng)目的動(dòng)力是繼續(xù)學(xué)習(xí)的動(dòng)力。從項(xiàng)目獲得的滿(mǎn)足感遠(yuǎn)遠(yuǎn)超過(guò)你在抽象中學(xué)習(xí)東西的滿(mǎn)足感。

        05、與其他程序員交談

        學(xué)習(xí)編程的一個(gè)很好的方法就是和其他的程序員交談。不必談?wù)撊魏翁囟ǖ膬?nèi)容??梢允悄阏趯W(xué)習(xí)的東西,可以是你認(rèn)為很酷的東西,可以是你正在工作的東西,皆可。你會(huì)發(fā)現(xiàn)很多程序員并不喜歡只是聊編程。這樣做可能會(huì)讓你學(xué)到很多關(guān)于庫(kù),服務(wù),編程語(yǔ)言和模式方面的知識(shí)。但是,最重要的是,你將了解到其他人是如何看待編程的。你會(huì)發(fā)現(xiàn),你認(rèn)為理所當(dāng)然或從來(lái)沒(méi)有考慮的事情在人與人之間是非常不同的。

      猜你喜歡:

      1.學(xué)習(xí)編程需要的時(shí)間以及方法

      2.編程語(yǔ)言用什么方法學(xué)習(xí)

      3.學(xué)習(xí)編程的時(shí)間以及方法

      4.學(xué)習(xí)編程的方法

      5.如何掌握編程的學(xué)習(xí)方法和技巧

      3798545