看到go语言简介想到的
這些東西是平時遇到的, 覺得有一定的價值, 所以記錄下來, 以后遇到類似的問題可以查閱, 同時分享出來也能方便需要的人, 轉(zhuǎn)載請注明來自RingOfTheC[ring.of.the.c@gmail.com]
?
??? 這幾天看go文檔時看到這么一段話:
??? Go is a new language. Although it borrows ideas from existing languages, it has unusual properties that make effective Go programs different in character from programs written in its relatives. A straightforward translation of a C++ or Java program into Go is unlikely to produce a satisfactory result—Java programs are written in Java, not Go. On the other hand, thinking about the problem from a Go perspective could produce a successful but quite different program. In other words, to write Go well, it's important to understand its properties and idioms. It's also important to know the established conventions for programming in Go, such as naming, formatting, program construction, and so on, so that programs you write will be easy for other Go programmers to understand.
???? 譯文: Go是一門新語言. 雖然它借鑒了其他很多語言中的特性, 但是編寫一個高效的Go程序及Go語言的編程方式和其他語言是有本質(zhì)區(qū)別的. 如果只是簡單的將C++和Java等代碼翻譯成為Go代碼, 那么將不可能得到最好的Go代碼. Java程序員使用Java的思維方式, 而不是Go的思維方式. 如果使用Go的思維方式, 那么一個問題可能有完全不同的解決方案. 因此如果想真正的用好Go語言, 你必須要理解它的語言特性和設(shè)計思想. 另外還要知道Go語言的編程風(fēng)格, 比如命名方式, 格式化, 程序結(jié)構(gòu)組織等, 采用通用的方式也可以便于和其他Go程序員交流.
???? 我覺得這段話不僅適用于Go語言, 而且在學(xué)習(xí)任何語言的時候都有指導(dǎo)性意義, 它道出了"如何學(xué)習(xí)一門新語言"的方法. 那就是不要先入為主, 拿著新東西, 硬要去往自己的習(xí)慣上套, 當(dāng)然會發(fā)現(xiàn)很難用或者是不適應(yīng). 不要認(rèn)為可以用新語言寫出helloworld或者是echoserver, 就覺得自己懂了. 可以說差的太遠(yuǎn)了.
???? 記得剛開始學(xué)計算機(jī)的時候, 學(xué)習(xí)的是basic, 然后聽說某人還會c/c++/Pascal, 馬上從內(nèi)心里肅然起敬, 覺得這個人太牛了, 太厲害了. 但是隨著學(xué)習(xí)的學(xué)習(xí)和深入, 慢慢發(fā)現(xiàn)會再多的語言, 不如精通一門, 而且在很多地方你也可以聽到"數(shù)據(jù)結(jié)構(gòu)和算法才是根本"這樣的說辭, 的確是這樣, 語言只是工具.
???? 當(dāng)你解決問題的時候, 你需要合理的描述和組織問題, 語言就是個實現(xiàn)工具, 可能是從小生活在"XX萬歲, 打倒UU"的非友即敵神奇國度中, 我突然間就鄙視起以前的自己來, 這時, 如果誰說會幾門語言, 內(nèi)心便不由自主的鄙視起人家, 殊不知自己也是從這個時候過來的, 這就叫成長.
???? 但是有句名言說的好: 人類的整個歷史就是在不停的重復(fù)同一個錯誤. 在經(jīng)過一段時間的學(xué)習(xí)和實踐后, 我的想法又發(fā)生了變化, 當(dāng)然不是說我的算法和數(shù)據(jù)結(jié)構(gòu)有好多的意思, 而是說眼界開闊了, 見的東西多了后, 認(rèn)識問題就能更深, 更客觀. 我又發(fā)現(xiàn), 語言很重要, 并不是一個什么簡單的實現(xiàn)工具, 什么樣的語言, 把你帶向這么樣的方向.
???? 為什么這么說呢, 因為不同的語言是發(fā)明人當(dāng)時為了解決不同的問題而發(fā)明的, 你能學(xué)一門語言, 也是因為它在某方面的卓越能力給你提供了價值. 所以你必然會受到來自語言中的對特定問題解決方式的影響, 什么模式慣用法, 庫, 框架都是在潛移默化的影響你看問題的觀點(diǎn)和方式. 這時你有兩條路可以走:
???? 1. 好好使用這門語言, 并強(qiáng)迫自己去學(xué)習(xí)更多類型的語言, 開闊自己的思路
???? 2. 當(dāng)一個語言的忠實教徒, 把自己的思路局限在該語言的發(fā)展上
???? 從意愿上大家當(dāng)然愿意選一, 但是不一定真能這樣做. 選一的好處就不說了, 不同語言中的世界觀和方法論將極大的豐富你的思維世界, 也就是因為這一點(diǎn), 我才又一次覺得語言很總要. 有的語言你不學(xué), 你不知道原來問題可以這樣解決, 畢竟, 能有所耳聞的語言都是有其特點(diǎn)的, 這就是一個巨大的財富, 而付出的就只是一些學(xué)習(xí)成本.
???? 當(dāng)然, 也可以抱著自己最喜歡語言, 其實這樣做也沒有什么錯. 因為你來到了一個充滿寶藏的地方, 但是你卻分文不取, 這樣是沒有任何錯誤的, 只是你自己比較吃虧罷了, 我一向的觀點(diǎn)是道理說清楚, 路自己走, 因為畢竟生活是自己的, 別人沒有精力或者義務(wù)來勸任何人, 專心挖自己的寶藏, 然后再把自己的經(jīng)驗寫成傳說吧, 有緣人自然受益.
???? 好了, 我感覺我有點(diǎn)偏題太多了, 只是有感而發(fā), 我其實想說的如何學(xué)習(xí)一門語言, 我不是什么高手, 也不是什么叫獸, 我只能舉一些例子來說明一下, 其中有我熟悉的, 也有不熟悉的.
???? c/c++/java? 未知學(xué)習(xí)法, 我不知道怎么學(xué)好
???? lua/js???????? 大愛, table, 表, userdata, C API, 源碼很少, 最好是讀, 這個是有價值的, 包你不后悔, 學(xué)完lua, js自通,
??? GameMonkey 學(xué)了lua的情況下可以學(xué)習(xí), 協(xié)程及其調(diào)度, 其他沒什么, 主要是看源碼, 寫的很清晰的, 看過lua再看它很輕松, 注意了GM和lua是兩個放棄搶占式調(diào)度, 選擇共享內(nèi)存的例子.
???? go?????? channel, goroutine, 內(nèi)存模型.[準(zhǔn)備這樣學(xué)], go和lua, gm剛好相反, 它放棄共享內(nèi)存, 選擇搶占式調(diào)度.這些都是學(xué)習(xí)的重點(diǎn).
???? 就是這些了, 其實歸納就是, 1.學(xué)習(xí)它有別于其他語言的特點(diǎn), 2. 要選一門語言從源碼徹底搞定[為了不引起大家的不滿, 我主動注釋: 我指的是小型的動態(tài)語言, 1w上下的代碼量, 我認(rèn)為去讀靜態(tài)語言的編譯器沒有益處, 很浪費(fèi)時間].?
???? 我覺得比較遺憾的就是到現(xiàn)在對于函數(shù)式編程還是概念性的認(rèn)知, 這個一定要抽空學(xué)習(xí)一下了.
???? 當(dāng)然大家都各有各的學(xué)習(xí)方法, 沒有萬能的方法, 最重要的還是堅持和追求. 我這篇純粹是談一下自己的體會, 全當(dāng)拋磚引玉吧.
轉(zhuǎn)載于:https://www.cnblogs.com/ringofthec/archive/2010/11/18/sikao1.html
總結(jié)
以上是生活随笔為你收集整理的看到go语言简介想到的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人口吸引力超宁波、南京,这座背靠上海的小
- 下一篇: ASP.NET中实现MSN通知消息功能