編程可以帶給我們什么?
- 2019-06-24 15:50:00
- 轉(zhuǎn)貼
- 6694

近年來大學(xué)最熱門的專業(yè)無疑是計(jì)算機(jī),而在中小學(xué)基礎(chǔ)教育這塊,少兒編程也是方興未艾,連美國前總統(tǒng)奧巴馬也提出“編程要從娃娃抓起”。
小學(xué)二年級(jí)的學(xué)生都已經(jīng)在學(xué)校學(xué)編程了,有的小學(xué)生就開始接觸圖形化編程。作為奮斗在一線城市的家長(zhǎng),就算不讓家里的孩子去學(xué)編程,至少也要了解下為什么少兒編程會(huì)在中國普及開來。
為什么要學(xué)編程?
現(xiàn)在任何行業(yè)都離不開計(jì)算機(jī),會(huì)編程這項(xiàng)技能,在求職時(shí)就如同90年代會(huì)英語一樣搶手。學(xué)編程,不是為了將來當(dāng)程序員。
而是為在自己行業(yè)里獲得更多的機(jī)會(huì),比如說做財(cái)務(wù)的,工作中少不了和excel表打交道,即使對(duì)每個(gè)菜單功能都很熟悉,還是有需要定制一些專門的查詢功能,這時(shí)編程就是不可或缺的技能。
也是因?yàn)橛?jì)算機(jī)對(duì)今天我們的生活而言,就如同汽車對(duì)出行的重要。車即使有定期去車行保養(yǎng),學(xué)習(xí)汽車相關(guān)的知識(shí),萬一出行途中汽車發(fā)生故障也不至于驚慌失措;而且說不定因此感興趣了,鉆研進(jìn)去,自己嘗試做個(gè)升級(jí)改裝也未嘗不可。
學(xué)編程,也是同理。電腦或是手機(jī)無論硬件還是軟件,總會(huì)有出問題的時(shí)候,會(huì)編程的人可以自己做簡(jiǎn)單故障定位,也可以作為興趣愛好在閑暇時(shí)間里做個(gè)網(wǎng)頁,寫給APP什么的。
編程學(xué)什么?
每次聊起學(xué)編程,被問到的第一個(gè)問題往往是“學(xué)哪種編程語言好”。回答這個(gè)問題之前,我想問你,覺得自動(dòng)檔和手動(dòng)檔的車,哪種好呢?
當(dāng)前初學(xué)者中最流行的Python和Javascript就像自動(dòng)檔車,編寫簡(jiǎn)單,強(qiáng)大庫函數(shù)支持廣泛應(yīng)用;而最為經(jīng)典的C語言就像手動(dòng)檔,難學(xué)難用,還需要通曉編譯原理、操作系統(tǒng)和計(jì)算機(jī)體系結(jié)構(gòu),當(dāng)然也最能體味駕駛的樂趣。
以前總覺得C語言對(duì)初學(xué)者太難了,這個(gè)想法今年5月在安大略省高中編程賽被徹底顛覆。一支由三個(gè)分別是五年級(jí),七年級(jí)和八年級(jí)亞裔男孩組成的隊(duì)伍特別醒目,年齡比其他選手小很多,卻在由各個(gè)學(xué)區(qū)優(yōu)勝者組成56支高中編程隊(duì)脫穎且出名列第九。這三個(gè)孩子就是用C語言寫的程序,C語言也是他們唯一接觸過的編程語言。所以初學(xué)者具體學(xué)什么語言,因人而異。
思維指導(dǎo)行動(dòng)。未來人人都會(huì)寫代碼,但程序設(shè)計(jì)是否簡(jiǎn)潔高效,就得在思維上見高低了。十年前,卡耐基梅隆大學(xué)計(jì)算機(jī)教授Jeannette Wing 提出Computational Thinking “編程思維”的概念,指出通過學(xué)習(xí)編程,內(nèi)里培養(yǎng)的其實(shí)是認(rèn)識(shí)問題和解決問題的思維方式,而這種思維方式可以跨界應(yīng)用到其他領(lǐng)域的學(xué)習(xí)和實(shí)踐中。
也就是說和編程語言相比,編程思維是內(nèi)功心法,在此基礎(chǔ)上,學(xué)習(xí)和使用哪種語言,猶如使用哪種兵器,只是工具層面上的東西。
什么是編程思維?
編程思維本質(zhì)上來說,就是能夠把現(xiàn)實(shí)生活中的復(fù)雜問題,逐步拆分成可理解的小問題,(Decomposition 拆分),接著根據(jù)已有的知識(shí)和經(jīng)驗(yàn),找出新問題和以前解決過的問題的相似性,舉一反三琢磨出規(guī)律(Pattern Recognition 模式識(shí)別),然后將問題里涉及的數(shù)據(jù)抽象(Abstraction)到數(shù)據(jù)結(jié)構(gòu)(變量,數(shù)組,鏈表等等),把數(shù)據(jù)處理過程可重復(fù)執(zhí)行部分抽象(Abstraction)成函數(shù)模塊,通過循環(huán)執(zhí)行,最后根據(jù)前三步的分析成果,設(shè)計(jì)步驟,寫出算法(Algorithms),從而解決問題。
編程思維本身是一個(gè)非常抽象的概念,下面我舉個(gè)例子來詳細(xì)解釋一下它的四個(gè)組成模塊。
編程思維1-2-3-4
我們都聽說過這樣一個(gè)故事:數(shù)學(xué)家高斯在三年級(jí)時(shí)候,老師要求從1+2+3開始一直加到100,其他同學(xué)都費(fèi)勁的一個(gè)數(shù)一個(gè)數(shù)的加,只有小高斯注意到了這些數(shù)可以兩兩配對(duì),相加和為101:
1+100=101
2+99=101 等等
一共有50對(duì),最后的和可以用乘法來做:(50X101)=5050
高斯的上述解題思路充分體現(xiàn)了編程思維中的拆分和模式識(shí)別,再進(jìn)一步延伸,就可以概括出求任意范圍【a, b】連續(xù)整數(shù)求和公式:(a+b)x (b-a)/2。
把原題擴(kuò)展一下:
假設(shè)你有100張撲克牌,依次編號(hào),從1到100,打亂洗牌后,突然發(fā)現(xiàn)少了一張,怎么知道少掉的是哪張?下面我們?cè)囍镁幊趟季S一起來一步步的解決這個(gè)問題。
第一步拆分:通過一張一張的查找,先在這堆牌里找1,再在剩下的牌里找2,然后再找3,依次下來,最后總能發(fā)現(xiàn)哪張少了。這種方法的局限是如果牌張數(shù)少還行的通,如果張數(shù)多,費(fèi)時(shí)費(fèi)力的,但符合一般人的解題思路。
第二步模式識(shí)別:如果能聯(lián)想到高斯的求和題,所有牌的面值總和應(yīng)當(dāng)是5050,將手上的牌一張接一張的加起來,假設(shè)得到的和是5040,用5050-5040=10,很快知道少掉的那張牌是10.這種方法比起前一種,明顯棋高一著。
第三步抽象:擴(kuò)展到現(xiàn)實(shí)生活中,假設(shè)有一副撲克牌,少了一張,如何快速定位少的是哪張?
一般情況下,我們都會(huì)重新理牌,先把4張Ace都找出來,再把四張2放在一起,依次下去,最后總可以看出哪張牌的哪種花色少了。
這種常規(guī)方法效率很低,如果聯(lián)想到我們剛剛建立的求和模型,是不是可以用來更為快速有效的解決這個(gè)問題?粗看每個(gè)數(shù)字都有四種花色,不唯一,好像不適用。
但是如果我們能解決如何把撲克牌花色和數(shù)字映射到計(jì)算機(jī)可以處理的數(shù)據(jù)的問題,就可以試用剛才的求和模型了。這也是考驗(yàn)抽象的能力的時(shí)候了。
不妨按花色來,設(shè)紅桃A 為1 , 紅桃2 為2 ,依次到K是13,然后方塊A為14,到方塊K是26,以此類推,黑桃A到K是 27到39,梅花則是40到52。
這樣一來問題就轉(zhuǎn)化成了有52張撲克牌,依次編號(hào),從1到52,洗完牌,發(fā)現(xiàn)少了一張,請(qǐng)問少掉的是哪張?是不是就可以很容易的套用第二步里總結(jié)的求和解題模型了?
再試想你有一千,一萬,甚至上百萬副撲克牌,每副都少一張(不盡相同),怎么能快速定位的少掉是哪些牌呢?
只要你能設(shè)計(jì)出快速定位一副牌里缺了哪張牌的計(jì)算方法,無論多少副牌,計(jì)算機(jī)都能在一眨眼的功夫,全部準(zhǔn)確無誤的給你找出來。計(jì)算機(jī)相對(duì)于人腦,有存儲(chǔ)容量大和處理速度快的優(yōu)勢(shì),所以計(jì)算機(jī)最擅長(zhǎng)的就是重復(fù)勞動(dòng)。能夠讓計(jì)算機(jī)從事高效的重復(fù)勞動(dòng)的前提,是人先思考和分析怎樣把復(fù)雜工作分解成多個(gè)可機(jī)械重復(fù)執(zhí)行的模塊,然后才可以通過程序讓計(jì)算機(jī)來處理。而這步比寫程序本身來的重要的多。
第四步 算法:當(dāng)要處理的數(shù)據(jù)映射到合適的數(shù)據(jù)結(jié)構(gòu),可復(fù)用的處理模塊也都分辨識(shí)別出來后,下一步就是利用條件,循環(huán),子程序模塊,來規(guī)劃出程序設(shè)計(jì)步驟,從而解決問題。
所以說,編程思維的核心,不是編程語言,也不是語法,甚至不是算法或數(shù)據(jù)結(jié)構(gòu)本身,而是如何分解問題,從中發(fā)現(xiàn)規(guī)律,建立解決問題的模型,并映射到合適的數(shù)據(jù)結(jié)構(gòu)和算法上,然后才能根據(jù)算法寫程序?qū)崿F(xiàn)。在此過程中,前兩步分解和模式識(shí)別,其實(shí)完全隸屬數(shù)學(xué)思維范疇,也是編程思維的基礎(chǔ)。而抽象和算法才是編程思維所獨(dú)有的。 也是在孩子學(xué)編程過程中,最需要強(qiáng)調(diào)的。
關(guān)注智慧山微信公眾號(hào)(zhihuishan2013)后,在公眾號(hào)里回復(fù)以下關(guān)鍵字,即可得到相應(yīng)資源!
公開課、作文、復(fù)習(xí)、試卷、知識(shí)點(diǎn)、活動(dòng)、拼音、字母、鐘表、看圖寫話、故事、雙語故事、成語、常識(shí)、APP、語文、數(shù)學(xué)、英語、百家姓、三字經(jīng)、唐詩三百首、自助查詢、超級(jí)口算
- 兒童故事
- 教育資源
- 小學(xué)語文
- 小學(xué)英語
- 小學(xué)數(shù)學(xué)
- 資源下載
- 專家講座
- 智慧山微課
- 少兒英語
- 專項(xiàng)復(fù)習(xí)
- 各科教材
- 課外讀物
- 育兒博客
- 書籍推薦
- 胎教音樂
- 經(jīng)典兒歌
- Scratch編程
- 一年級(jí)新生
- 家長(zhǎng)課堂
- 心理準(zhǔn)備
- 習(xí)慣培養(yǎng)
- 能力鍛煉/學(xué)習(xí)用品
- 經(jīng)驗(yàn)分享
- 家長(zhǎng)困惑
- 小學(xué)入學(xué)指南
- 幼小銜接群
- 飲食健康
- 學(xué)齡前
- 兒童電影
- 成長(zhǎng)故事
- 學(xué)習(xí)寶典
- 幼小銜接
- 古詩文
- 影視動(dòng)畫
- 科學(xué)小實(shí)驗(yàn)
- 精選課程
- 書法比賽專用
- 首頁課程介紹
- 小學(xué)指南
- 智慧山活動(dòng)
- 說明
- 家庭教育
- 曬飯—一早一晚
- 兒童編程
- 認(rèn)知階段Scratch圖形化編程
- 理解階段Python人工智能語言
- 運(yùn)用階段C++及信息學(xué)競(jìng)賽
- code.org作業(yè)答案
- code.org作業(yè)視頻講解
- 編程網(wǎng)站
- python入門課作業(yè)答案
- python1(上)作業(yè)答案
- python1(下)作業(yè)答案
- Scratch入門課作業(yè)答案
- 作業(yè)解析
- Scratch相關(guān)資源
- python2(上)作業(yè)答案
- Scratch Level 1作業(yè)答案
- python2(下)作業(yè)答案
- Python3(上)作業(yè)答案
- Scratch Level 2作業(yè)答案
- 國家政策及比賽
- 2022年P(guān)ython寒假課
- 2022年Scratch寒假課
- 編程網(wǎng)站
- 智慧山圖書館
- 小升初
- 英語學(xué)習(xí)
- 智慧家庭教育