引言
此篇文章是我在編程的過(guò)程中遇到的一些方法和心得, 甚至超出了編程的范疇,以前多記載于紙面或者是備忘錄等, 所以并不權(quán)威, 可能只是一家之言, 不免瑣碎.
引用<大學(xué)的觀念>(<The Idea of a University>)的作者約翰 · 紐曼的一句話
只有教育, 才能使一個(gè)人對(duì)自己的觀點(diǎn)和判斷有清醒和自覺(jué)的認(rèn)知, 只有教育, 才能令他闡述觀點(diǎn)時(shí)有道理, 表達(dá)時(shí)有說(shuō)服力, 鼓動(dòng)時(shí)有力量. 教育令他看世界的本來(lái)面目, 切中要害, 解開(kāi)思緒的亂麻, 識(shí)破似是而非的詭辯. 撇開(kāi)無(wú)關(guān)的細(xì)節(jié).
而知識(shí), 見(jiàn)解, 經(jīng)驗(yàn)的分享和學(xué)習(xí)是自我進(jìn)行學(xué)習(xí)的一個(gè)重要的途徑, 所以, 知識(shí)的分享總會(huì)增值, 非常期待與各位看官切磋想法, 交流心得.
知識(shí)的分類
我個(gè)人會(huì)把我所獲得知識(shí)分為兩個(gè)大類, 陳述性的知識(shí)和程序性的知識(shí).
- 陳述性知識(shí): 用敘述事實(shí)來(lái)思考他, 他維護(hù)了真相, 事實(shí)的陳述, 舉個(gè)例子, X的平方根是Y,Y的平方是X. 他是個(gè)事實(shí), 也就是原理, 或者說(shuō)是定義,他并不會(huì)幫助你計(jì)算出X的平方根或是Y的平方是多少, 他最多可以幫助你檢查你的計(jì)算, 他會(huì)告訴你怎么才可能去檢查一些事, 但是他沒(méi)有告訴你怎樣的去檢查.
- 程序性知識(shí): 有了陳述性質(zhì)的知識(shí), 程序性的知識(shí)就非常好理解了, 程序性質(zhì)的知識(shí)可以是對(duì)推論事情的具體的描述, 解決一件事情具體的方法, 是一系列行動(dòng)具體的描述.
一法通而萬(wàn)法通的編程
什么是最好的語(yǔ)言之蓋棺定論
當(dāng)你接觸到了編程, 開(kāi)始編程后得一段時(shí)間, 你會(huì)感覺(jué)到你所寫的代碼, 對(duì)于目前來(lái)說(shuō), 他們已經(jīng)把你所需要的變量, 類型, 甚至一部分功能都已經(jīng)準(zhǔn)備完全了或者說(shuō)是原材料都準(zhǔn)備好了. 你需要做的只是那他去編寫程序, 或者說(shuō)是根據(jù)這些原材料去制作菜肴, 一個(gè)菜譜最根本的其實(shí)就是一堆原材料所構(gòu)成, 包括了柴米油鹽等等.
1936年圖靈展現(xiàn)了6種最基本的數(shù)據(jù)類型,可以在計(jì)算過(guò)程中, 表達(dá)出任何含義來(lái), 六個(gè)基本類型,你可以規(guī)定整個(gè)世界, 6個(gè),你可以編寫任何的程序, 一種編程語(yǔ)言能夠做的事情在另一種編程語(yǔ)言中你也能夠做到, 所以上文說(shuō)道, 沒(méi)有一種編程語(yǔ)言是best language, 他也叫圖靈兼容性
參考于Quora
六條基本指令
1.read
2.write
3.erase
4.move left
5.move right
6.halt
基于此我個(gè)人覺(jué)得計(jì)算機(jī)或者說(shuō)是編程知識(shí)的體系結(jié)構(gòu)應(yīng)該是成一個(gè)倒立的金字塔形狀或者是一種菱形.
有趣的是, 在目前來(lái)說(shuō), 或者是目前的大部分人來(lái)說(shuō), 都是先建立起金字塔的最中心部分,在去針對(duì)深度, 廣度, 和高度去拓展(我一個(gè)老師確切的提到這三個(gè)角度, 當(dāng)時(shí)覺(jué)得很有意思) 最后才形成了金字塔或者說(shuō)接近于金字塔的形狀
所以基于圖靈兼容性我可以得到以下結(jié)論
總會(huì)聽(tīng)到一些話, 什么什么語(yǔ)言最好, 但是經(jīng)過(guò)你仔細(xì)的思考你就會(huì)發(fā)現(xiàn)沒(méi)有 best language 他們?cè)谀承┣闆r下,某些環(huán)境中, 會(huì)比其他的語(yǔ)言更好用, 有更強(qiáng)的功能, 更強(qiáng)的適應(yīng)性, 更適用, 這個(gè)世界有上百或者說(shuō)是幾百種編程語(yǔ)言, 有的甚至是專門用來(lái)解決一種問(wèn)題. 所以初學(xué)者要想好你想做什么, 你是真正的熱愛(ài)編程還是想要拿她去賺錢, 養(yǎng)活自己, 或者說(shuō), 你在接觸到or對(duì)編程有一定了解的時(shí)候, 你就會(huì)非常理智的選擇自己學(xué)習(xí)的語(yǔ)言了, 而不是一味的跟風(fēng), 一味的什么火 才去學(xué)習(xí)什么.
對(duì)于編程人員來(lái)說(shuō)(主要為新手)十分重要的事情
再講這個(gè)事情之前我會(huì)把一個(gè)程序的要素分為語(yǔ)法和語(yǔ)義
- 語(yǔ)法: 語(yǔ)法的含義就是, 在語(yǔ)言中合法的表達(dá), 或者說(shuō)是在這個(gè)語(yǔ)言中一句話or一個(gè)功能的合理表示是什么.
所以需要你掌握一個(gè)語(yǔ)言正確的語(yǔ)法, 需要對(duì)你怎么把寫好的表達(dá)式合理的放在一起進(jìn)行描述 - 語(yǔ)義: 語(yǔ)言的含義, 或者說(shuō)在編程中可以直接的表達(dá)一定的含義的一段代碼, 我更傾向于把他歸類為整體(這個(gè)整體甚至可以小于一行代碼)的含義. 或者說(shuō), 當(dāng)我運(yùn)行了這段代碼他會(huì)發(fā)生什么
對(duì)于新手來(lái)說(shuō), 經(jīng)常性的會(huì)出現(xiàn)的問(wèn)題就是BUG, 這并不是說(shuō)老手或者是大神就不會(huì)出現(xiàn)這種問(wèn)題, BUG是每一個(gè)編程者都無(wú)法躲避的東西.

為什么針對(duì)新手說(shuō)呢?
這就是一些新手經(jīng)常性的犯一些語(yǔ)法的錯(cuò)誤, 如果你犯這種錯(cuò)誤, 恭喜你, 目前絕大多數(shù)的開(kāi)發(fā)平臺(tái)都會(huì)以一個(gè)大大的紅色嘆號(hào)或者是一個(gè)黃色的警告提示你,他很容易會(huì)被發(fā)現(xiàn), 而且你一般無(wú)法帶著這種error去運(yùn)行程序, 你會(huì)很容易的修正他.
什么是不容易被發(fā)現(xiàn)的錯(cuò)誤 & 有什么后果
但并不是所有的錯(cuò)誤都是語(yǔ)法上的錯(cuò)誤, 或者說(shuō)是被開(kāi)發(fā)平臺(tái)所捕獲, 有一些問(wèn)題會(huì)躲過(guò)檢查, 這些錯(cuò)誤多是語(yǔ)義的錯(cuò)誤, 是程序無(wú)法去做出判斷的, 或者說(shuō)你的邏輯超出了開(kāi)發(fā)平臺(tái)的偵測(cè)邏輯.
這些沒(méi)有被偵測(cè)出來(lái)的錯(cuò)誤就意味著你成功的運(yùn)行了你的程序, 你的程序給你返回了一個(gè)值, 但是這個(gè)值卻不是你想要的, 最可怕的是你可能會(huì)分辨不出來(lái), 甚至這個(gè)錯(cuò)誤會(huì)與你的程序整體產(chǎn)生聯(lián)動(dòng), 沿著程序的運(yùn)行一直的傳播下去, 直到他深埋于程序的最深處, 你卻找不到他在哪, 產(chǎn)生可以稱為災(zāi)難性的后果.
有什么解決的方法
因此, 所有的程序員都會(huì)希望開(kāi)發(fā)平臺(tái)可以提示出所有的error, 但是并不能做到, 但是這就是一個(gè)程序員需要做的事, 解決BUG, 甚至是這種BUG也是我們工作的一環(huán),所以, 當(dāng)你的代碼中語(yǔ)法沒(méi)有錯(cuò)誤, 而且也沒(méi)報(bào)錯(cuò)的時(shí)候, 你就需要考慮你的語(yǔ)義是否有問(wèn)題了, 為了解決這種錯(cuò)誤避免他的發(fā)生, 除了你要對(duì)本身所學(xué)習(xí)的語(yǔ)言所有了解, 你還需要一種不會(huì)觸發(fā)這些錯(cuò)誤的編碼風(fēng)格 — 無(wú)論你在學(xué)習(xí)或是使用哪種編程語(yǔ)言, 所以你需要形成一種良好的編碼風(fēng)格, 一種容易發(fā)現(xiàn)程序中的語(yǔ)義BUG的風(fēng)格