⑴ 這本書告訴你,計算機為何能讀懂人類語言,編程思維讓你更聰明
在這個互聯網時代,我們出門購物、拍照、打電話、瀏覽信息,只需要帶上一部智能手機就可以了。如果在20年前,要實現這些功能,需要帶一大堆東西。如今,我們口袋裡的這台計算機,和50年前送宇航員上月球的那台計算機相比,功能更強大,體積更小巧。
計算機為什麼功能強大,能讀懂人類的語言?直到我看了《寫給所有人的編程思維》這本書,解答了心中的疑惑,明白了計算機的工作原理。這一切能都離不開程序員的編程設計,說到編程,人們總是想到程序員坐在電腦面前,敲擊著一長串神秘的代碼。其實,編程體現的是人類的智慧。
在《寫給所有人的編程思維》這本書中,闡述了計算機的 歷史 和二進制工作原理,以及如何創建編程思維。計算機的編程需要邏輯、推理和數學。編程思維可以提升思維能力,創造性地解決問題。
學習編程思維並不是要掌握編碼技巧,而是學習一種解決問題的思維方法。本書有四章內容:學會編程思維;解決問題;學習編程語言;繼續努力。
本書的作者吉姆·克里斯蒂安,是英國著名的 科技 教育專家,編程怪才,曾獲得Dr.Dobb』s程序設計卓越獎。
我們來看計算機是怎樣讀懂人類語言的,我們如何用編程思維解決問題。
計算機的特徵。
計算機是指能夠接收、轉換、存儲信息,再用設定的形式將信息輸出的電子設備。
計算機的形式多種多樣:手機、平板電腦、台式計算機、筆記本。雖然它們形狀各異,但內部的結構都大同小異,都有:主板、網路、輸入和輸出設備、外存儲器、隨機存儲器、微處理器。
微處理器就是人們常說的中央處理器或CPU,是計算機的大腦, 負責處理「思維」工作。
在微處理器的內部,有成千上萬個開關等待電信號的到來,電信號通過通道和閘門的開關,以二進制數字的形式生成。 微處理器的核越多,每秒能夠運行的指令也就越多。
編程就是將人的想法、思維,翻譯成計算機能讀懂的二進制數字語言,轉換成計算機要執行的動作。
計算機的語言--二進制。
計算機中所有的輸入和輸出,都是由無數個0和1組成的二進制數字經過編碼、解碼,轉換成計算機能識別的代碼實現的。
二進制是1679年,由德國天才大師萊布尼茨研發出來的。 二進制是一種計數方式,只用到兩個數字0和1,因為計算機只能識別0和1組成的代碼。
0和1這兩個數字掌管計算機內部晶體管的開關,1表示開,0表示關。 人們操作計數機,就是通過控制計算機內部晶體管的開關,引導電流進入正確的方向,實現程序運行的。
我們工作、生活中常用的算數是十進制,就是逢10進1。 計算機的二進制規則是逢2進1 。 1和0就是計算機能懂的語言, 表示開和關,是和否,真和假。
在二進制中,數字1,用1表示;數字2用10;數字3用11;數字4用100;數字8用1000。
如果用十進制,兩只手只能數到10,但如果用二進制,一隻手就能數到31。
如果用兩只手,就能數到1023,因為在二進制中,後一根手指的數值是前一根手指的兩倍。第1隻手的小拇指表示16,另一隻手的大拇指就表示32,食指就代表64,中指代表128,無名指代表256;小指代表512。
這個 游戲 很好玩,能夠鍛煉創新思維 和邏輯思維 。
二進制數值還可以用來表示英文的26個字母,A用數字1;B用10;C用11;……
如果這組信息:1000 101 1100 1100 1111 拼寫出來就是「你好」,這樣就將人類語言 轉化成 計算機能懂的語言。
計算機語言講究語法和語境,一個逗號,一個字母就能改變整個句子的意思,可以說,差之毫釐,失之千里。
計算機的編程語言經歷了機器語言、匯編語言、高級語言三個階段,世界上的編程語言有100多種,但是常用的只有10-15種,這里介紹幾種編程語言。
演算法就是為了完成某項任務,按照設定的順序執行的一系列明確的指令。 演算法中指令越具體、越明確,指令運行時出錯的概率就越小。
比如我們讓一個叫小智的機器人來整理床鋪。
因為小智不明白「整理床鋪」的做法,我們整理的要求是:把羽絨被、毯子、枕頭收拾好,所以我們下達的指令要具體、清晰。
1. 將羽絨被平整地鋪在床上。
2. 將毯子平整地鋪在羽絨被上。
3. 將枕頭放在毯子的上面。
演算法就像做菜使用的菜譜,是計算機要執行的命令,我們來看一下,給機器人小智發出指令,做一個加乳酪的三明治。
你看,在上面的步驟中,描述很具體,講到了如何握刀,刀口的方向,其實,還可以具體到小刀的角度和抹黃油的速度。
在7-10步中,指令包括了塗抹黃油的時間,因為小智不知道塗抹黃油多少才算夠了,所以,程序員做出估算,大概需要三秒時間。
循環
編程語言的設計要做到便捷、高效,在演算法編寫時,要做很多具體的指令,不僅繁瑣,而且還有重復。為了避免重復的指令,在編程中,可以用循環來處理一些基礎的指令,讓程序變得簡單一些。
比如,我們讓機器人小智走過來10步,我們要說10次「向我走1步」,這樣下達的指令不僅繁瑣,還容易在次數上出錯,解決方法就是用循環:「向我走10步。」
循環就是執行重復的指令,直到過程結束的一種結構。 循環分為兩種:計數循環和條件循環。
計數循環是通過次數控制的循環,叫for循環 。for循環會一直重復指令,不管結果如何。
條件循環式通過條件來控制循環次數,就是While循環。
在演算法中運用循環,修改一個語句就能完成雙倍的編程工作,達到事半功倍的效果。
比如,我們在三明治的程序指令中,可以運用循環來提高效率。在第10步之後,多加一條指令:重復以上1-10步。這樣,機器人就會重復工作,但是這樣會出現無限循環,機器人會按照指令工作,一直在麵包片上塗抹黃油,直到麵包片用完,最後程序崩潰。
為了避免這一缺陷,我們要對程序進行修補,將步驟11修改為:重復以上1-10步,直到給兩片麵包片塗完黃油為止。這樣增加了一個特定的條件,就使機器人的操作更加完美。
變數
編程中經常會遇到變數,變數就像一個貼著標簽的盒子,裡面裝有變數名和變數值。
電子 游戲 中經常遇到變數,比如, 游戲 角色還剩多少條命,命的次數是變數。
我們人體也有變數,比如:頭發的長短,身高、體重的變化,年齡的增長。
下面我們來做一個猜年齡 游戲 。
在這個 游戲 中,程序中的年齡適用於任何年齡的人,人的年齡就是變數名,年齡的數值是變數值,可以編寫出:((年齡×2+1)×5+5)×10-100==年齡
經過推算,左邊的公式最後的結果是100倍年齡,劃掉最後兩個00,自然就是年齡了,這個 游戲 玩的就是數學魔術。
條件語句
條件語句是計算機根據給定的信息做出選擇的語句。
生活中,我們每天都要根據條件做出選擇。比如:如果人行道信號燈是紅色,那麼我們就要等待綠燈亮,否則就可能被車撞倒。
下面我們來做一道和條件語句相關的題:假如你去找朋友約翰還錢,結果發現,約翰、詹姆斯、威廉是一模一樣的三胞胎,有人告訴你,約翰、詹姆斯總是說謊話,只有威廉說真話,你只能問一句話,確認此人是不是約翰,你會怎麼問?
正確答案是:「你是詹姆斯嗎?」因為威廉說真話:「不是。」詹姆斯說謊話:「不是。」只有約翰說謊話,是唯一一個回答「是」的人。
調試
調試這一術語起源於20世紀40年代,是美國海軍少將格雷斯·赫柏提出的。她在哈佛大學為計算機編寫程序時發現了一隻真正的蟲子(bug)鑽進了計算機,使計算機無法正常運行,調試(debugging除去蟲子)由此而來。
調試就是仔細檢查編寫過程、演算法、流程圖,排除並修復使程序無法正常運行的問題或錯誤。
在編寫程序的過程中,計算機只是執行接受的指令,不會像人類一樣思考,所以,在程序編寫完成後,要花很多時間在代碼的調試上。
調試常用的方法是:尋找bug(程序錯誤);給代碼加註釋;小黃鴨調試法。
小黃鴨調試法看似很笨,卻很有效,就是在電腦旁放一個小黃鴨,然後對一無所知的小黃鴨解釋程序中的所有細節。
這個方法的奧妙是,程序員給不懂編程的人解釋代碼如何運行時,必須非常詳細的講解代碼運行的細節,程序員就會發現到程序中的錯誤,自己解決問題。
編程思維包括理性推理、邏輯思維和數學運算,學習編程思維能夠創造性地解決問題、表達思想。
編程思維有四個部分:問題分解;模式識別;抽象思維;演算法設計。
問題分解
模式識別
比如,我們要在一些網站上登錄,會被要求輸入驗證碼,這就是模式識別,目的是為了防止其他人偽裝成用戶開啟別的功能。
抽象思維
使用抽象思維時,要拋開那些與問題無關的信息。
比如,你星期天下午兩點要去打球,家離球場有5.2公里,你上午要給花澆水,拖地板,中午要去媽媽家吃飯,估計一點鍾能吃完,媽媽家距離球場有3.5公里,那麼在一點到兩點的時間內,要走多遠的路?
在所有的信息中澆花、拖地都與去球場無關,因為媽媽家離球場的距離更近,唯一的相關信息只有一個:媽媽家離球場有3.5公里。
演算法設計
你一定聽說過數學天才高斯的故事。1785年,高斯的老師給學生出了一道題,把1-100的數字全部加起來,老師本來想多佔用一些課堂時間,沒想到令老師吃驚的是,只有8歲的高斯很快給出了答案:5050。
在那個年代並沒有計算機,高斯也不是從頭到尾將數字一個個相加。
我們來看高斯是怎樣用編程思維來解決問題。
首先是問題分解,他將一個大問題分解成小問題,找出每組數字的規律性,就是每對首尾數字相加,得數相同。
其次是形成自己的模式識別,可打亂順序,只要把所有數字相加就可以,1+100=101,2+99=101……,有50組首尾相加等於101的數字。
再次是採用抽象思維,略去了不必要的算數步驟,沒必要將首尾數字依次相加到最後一組,
最後是演算法設計,是用乘法進行運算:50×101=5050。
無論計算機的功能多麼強大,也是人類賦予的,真正強大的還是人的大腦。
隨著互聯網的發展,人們的生活已經離不開計算機,比如:用手機打電話、聽歌、拍照;用電腦發郵件、瀏覽 財經 信息;在超市買東西結賬,只需掃碼商品,計算機會自動結算金額,核對賬單。
《寫給所有人的編程思維》這本書告訴我們,編程是人與計算機之間的橋梁,人類通過編程創造了更加美好的世界。我們可以不學編程,但要學習編程思維。
編程思維是我們解決問題的元技能,與我們的生活息息相關,工作、學習,甚至家務勞動,都離不開編程思維的邏輯能力和創造力,學習編程思維就是學會思考。
⑵ 為什麼零基礎自學編程者,大多半途而廢
笨學不會
同理,反應慢學不會,年齡大學不會??
反向引申,聽懂學會,理解能用,學過了學會了,學習了學成了??
講到這里這篇文章其實已經可以結束了,因為真理就是那種大家心裡都明白,卻不願意相信的東西。為什麼這么說,因為這是我的心路歷程啊。
注意!下面要講故事了。
這是一個真實的故事。有個叫雅子若宮的日本老奶奶,今年81歲,這兩天火了。
知乎自古出大神,怎麼辦?大神的話我得看看。
仔細一看,不得了,大神們也分兩派。人生到哪都得站隊。
唯心派
@卡昂格賀:
大多數人的努力程度,自學不了任何東西。
@王海波:
不光編程,零基礎學任何東西都很容易半途而廢。關於夢想這件事,很多人夢是夢了,卻不夠想。真的很喜歡么,真的很想做成么?半途而廢,基本上都是空夢而沒有足夠想。
@伍一峰:
自學從來不是一件容易的事,需要強大的自製力和明確的目標,最好還有旺盛的熱情。而且自學往往意味著,業余、課外,不學是不會死的。
@古居延:
沒有必須掌握它以實現某種目的的決心與毅力。
@James Swineson:
因為不知道學編程為了什麼,無目標,只是聽說學這東西好而已。沒有創新或者改變的動力,是做不出什麼東西的。
唯物派
@wsivoky:
他們用火葯去製造了煙花,而不是大炮。
編程不是一個充滿技巧的超炫玩具,而是解決問題、提高效率,甚至賺錢的強大工具。請正確使用。
@ffy:
因為編程不是「學」會的,是「用」會的。
我用matlab,看了一個暑假的書,到時一用啥都不會,後來有個事要寫程序,感覺得到了很多。
@文楓:
我總是在工作或學習中必須要用到某種編程語言時才開始現學現用。把解決實際工作中的具體任務作為學習的最終目標,可以增強學習動機和慾望。不過在這之前,需要掌握一些計算機編程的基礎知識。
學習畢竟不像閱讀小說和瀏覽知乎,淺嘗輒止難以學有所成!
@劉昕宇:
多半是沒人帶!
早期學習靠興趣,但是大部分?潘浚??爸杏齙降奈侍飠岱淺6唷?/p>
有時候,遇到卡的地方,真是很受不了,
卡著卡著,就不學了。
@匿名用戶:
第一個是沒人陪:自個摸黑前進,哪個標簽是做什麼的都很難了解到。
第二個是沒資源:國內編程圈沒有國外那麼有分享研究帶新人的精神,更多的都是等著國外的東西傳進來,好自個在工作中賺更多錢。
第三個就是國內各種摟錢教材的功勞了,不用說你懂的。
這個隊好站。這次小智兩邊都站。因為不管唯心還是唯物,對我來說,每一個我都有,每發生一個都能讓我半途而廢。畢竟,我的人生格言是:世上無難事,只要肯放棄。
你們,也是吧?
針對這種懦弱癌,也不是無葯可救。在沒有退路的情況下,我們每個人都能激發出前所未有的潛能。根據分析,自學編程主要有以下的攔路虎:
沒有目標,不知道學來干嗎?
我的目標是寫一個類似於俄羅斯方塊一樣偉大的游戲(因為,我曾經的綽號是俄羅斯方塊之王),當然你的目標可能是理想、夢想、大神、大蝦、掙錢、買房子、娶媳婦、生孩子??
攔路難度:跟你的目標堅定度成正比。
找不到系統的學習資源
這個很可怕,而且是個死循環。因為是小白,所以找不到也不知道什麼是系統的學習資源,因為沒有系統的學習資源,所以無從下手;因為無從下手,所以難以構建系統的學習框架;因為難以構建系統的學習框架,所以一直都是小白。
攔路難度:
專業名詞太多
編程對於小白來說,太多晦澀難懂的概念,每個知識點過一遍都不知道過了什麼。(字典,模塊,集合?)
攔路難度:
沒有人指點
「解惑」也是學習中很重要的一環,當然也可以上論壇提問,但是這樣一是效率低,二是有些問題,高手不屑於回答,而且還會調侃一下(這是不是也是其中一個障礙呢)
攔路難度:
除了第一個,好像都是無解的。所以,小智又發現了一個宇宙級的「矛與盾」:
不會學=學不會
不會學學不會
那麼,
在國內,要「會學」有多難?
現在來說,
來智游就夠了!
沒有目標?沒關系。這里有無數有著堅定目標的同路人,被他們的前進的步伐裹挾著的你,原地踏步就代表著退步,進步從來都是不由自主的。
沒有系統的學習資源?這里有一套教研系統在為每門專業的課程「輸血」。智游會定期組織行業大牛和每個專業所有的老師進行教學教研會議,對各類課程進行升級,對課程的整體設計體系進行合理的編排。
專業名詞太多?沒有人指點?我們的老師會全天候指導和隨班陪學,即使畢業工作後也提供遠程技術指導。