來(lái)源:JHHY菁華浩揚(yáng) 作者:王有財(cái) 2018-06-17 10:17:27
應(yīng)該是美國(guó)中小學(xué)即將開(kāi)學(xué)的緣故,家長(zhǎng)需要給孩子們選擇周末興趣班,這幾天好多朋友問(wèn)我,孩子們要不要學(xué)編程,更具體的說(shuō),要不要學(xué)習(xí)Python程序設(shè)計(jì)。孩子要不要學(xué)編程,的確是個(gè)好問(wèn)題。就算沒(méi)有朋友問(wèn),我自己也考過(guò)很多,也曾試過(guò)。在女兒讀二三年級(jí)的時(shí)候,我教過(guò)她簡(jiǎn)單的Python和Java程序設(shè)計(jì)。很可惜,成效并不大,盡管我挑選了幾個(gè)很有趣的簡(jiǎn)單數(shù)學(xué)問(wèn)題,用計(jì)算機(jī)去求解,仍然不能引起孩子的興趣。這就更讓我進(jìn)一步思考,到底該不該現(xiàn)在就教孩子寫(xiě)程序,如果教,該教哪一種程序設(shè)計(jì)語(yǔ)言,怎么教。
我自己不是計(jì)算機(jī)科班出身,但是靠著科學(xué)計(jì)算混飯吃,能夠熟練地使用C,C++,F(xiàn)ORTRAN,Java, Visual Basic,MATLAB,PYTHON,Bash, GrADS, NCL甚至是AML寫(xiě)程序。大學(xué)期間,我正經(jīng)八本上的計(jì)算機(jī)課,也只有C語(yǔ)言程序設(shè)計(jì)。用了不到一個(gè)月時(shí)間,我就把譚浩強(qiáng)先生寫(xiě)的《C語(yǔ)言程序設(shè)計(jì)》自學(xué)完了。通過(guò)這本書(shū),我學(xué)會(huì)面向過(guò)程的軟件開(kāi)發(fā)方法。學(xué)期末,我就用C語(yǔ)言給我們班寫(xiě)了一個(gè)獎(jiǎng)學(xué)金評(píng)選的程序。當(dāng)時(shí)是九十年代末,C++已經(jīng)開(kāi)始成為潮流。寫(xiě)程序的人如果不會(huì)C++,是不敢出去吹牛的。我很喜歡吹牛,所以買(mǎi)了本C++程序設(shè)計(jì)的教材。C++比C語(yǔ)言豐富多了,我用了兩三個(gè)月才學(xué)明白什么叫做面向?qū)ο蟮能浖_(kāi)發(fā)方法。我大學(xué)畢業(yè)的時(shí)候,用C++開(kāi)發(fā)了一套人工神經(jīng)網(wǎng)路的程序。在2000年,在好多國(guó)內(nèi)的書(shū)店里,如果你問(wèn)有沒(méi)有人工神經(jīng)網(wǎng)絡(luò)方面的書(shū),店員大多會(huì)讓你去醫(yī)學(xué)門(mén)類(lèi)去尋找。所以,我那時(shí)候,作為一個(gè)地質(zhì)系的學(xué)生,用基于人工神經(jīng)網(wǎng)絡(luò)的人工智能,去研究礦山穩(wěn)定性,也值得大吹特吹了。自吹自擂這么多,拉回到程序設(shè)計(jì)的話(huà)題上,其實(shí)哪種語(yǔ)言不重要,關(guān)鍵是學(xué)會(huì)軟件開(kāi)發(fā)的方法,比如前面提到的面向過(guò)程和面向?qū)ο筌浖_(kāi)發(fā)。
當(dāng)然,一個(gè)寫(xiě)程序的人必須要了解計(jì)算機(jī)的體系結(jié)構(gòu)。我很幸運(yùn),從C語(yǔ)言開(kāi)始學(xué)習(xí)編程。學(xué)過(guò)C語(yǔ)言的,很多人都很憎恨它,就算學(xué)過(guò),一輩子也不會(huì)用C語(yǔ)言寫(xiě)一個(gè)超過(guò)100行的程序。C語(yǔ)言之所以招人厭惡,是因?yàn)樗咏?jì)算機(jī)硬件了。作為一種強(qiáng)類(lèi)型語(yǔ)言,也就是說(shuō),需要直接聲明和定義變量的計(jì)算機(jī)語(yǔ)言,寫(xiě)程序的人必須了解,什么是整數(shù),什么是實(shí)數(shù),什么數(shù)有符號(hào),什么數(shù)無(wú)符號(hào)。解決問(wèn)題,我們必須搞清楚,實(shí)數(shù)需要小數(shù)點(diǎn)后幾位的經(jīng)度,整數(shù)需要幾個(gè)字節(jié)。問(wèn)題復(fù)雜了,需要分配內(nèi)存,需要傳遞復(fù)雜變量,就要涉及地址和指針。把這些細(xì)節(jié)搞清楚,的確是需要花點(diǎn)時(shí)間學(xué)習(xí)計(jì)算機(jī)的硬件和原理。因?yàn)檫@個(gè),和多人都望而卻步打了退堂鼓。然而,對(duì)那些肯花時(shí)間鉆研的人,一旦弄明白了底層細(xì)節(jié),以后操作計(jì)算機(jī)就像是庖丁解牛一樣,可以輕松玩耍。
通過(guò)C語(yǔ)音學(xué)習(xí)編程,起點(diǎn)高,的確有點(diǎn)難。對(duì)很多人來(lái)說(shuō),就像是撞墻一樣痛苦。可是一旦把墻撞破了,就可以把頭伸進(jìn)計(jì)算機(jī)的內(nèi)部世界,能夠享受把自己的想法轉(zhuǎn)變成計(jì)算機(jī)程序的自由,最終可以驅(qū)使計(jì)算機(jī)替你思考。在我上大學(xué)的時(shí)候,除了計(jì)算機(jī)系的學(xué)生,肯去研究C和C++程序設(shè)計(jì)的人非常少。多數(shù)人都去學(xué)習(xí)如BASIC這樣的語(yǔ)言。BASIC很方便,方便到變量既可以聲明,也可以不聲明,總之是無(wú)所謂,關(guān)系不大。靈活帶來(lái)方便,也帶來(lái)混亂。BASIC的程序,大都是亂七八糟,就像一盆煮熟的方便面,順著哪根面條,也捋不出一個(gè)頭緒。很多人把這個(gè)問(wèn)題歸咎于BASIC程序中的GO TO語(yǔ)句。在我看來(lái),這多少是冤枉了GO TO。問(wèn)題的主要原因是,那些從BASIC學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì)的人,沒(méi)有學(xué)會(huì)正確的軟件開(kāi)發(fā)方法。他們大多是圖簡(jiǎn)單,圖方便,圖快,最后把程序搞成了涂鴉。回想一下當(dāng)年我的同學(xué),熱衷短平快學(xué)習(xí)BASIC和Visual Basic之類(lèi)編程工具的人,大多沒(méi)有在軟件一行走下去深入發(fā)展。相反,好多學(xué)習(xí)C,C++和Visual C++的同學(xué),成了軟件業(yè)的精英,現(xiàn)在坐擁豪宅若干。
前面談的都是歷史,現(xiàn)在轉(zhuǎn)到現(xiàn)實(shí),F(xiàn)如今再?zèng)]有人學(xué)習(xí)什么Basic和Visual Basic。短平快的軟件開(kāi)發(fā),大家都選擇Python。Python可以算最成功的解釋型語(yǔ)言,沒(méi)有之一,而是唯一。Python引人指出,大概有這么幾點(diǎn)。第一就是,嚴(yán)格的程序書(shū)寫(xiě)規(guī)范。Python的作者深受Perl語(yǔ)言自由靈活書(shū)寫(xiě)風(fēng)格之苦,要求Python的開(kāi)發(fā)者,必須按照既定的規(guī)則,書(shū)寫(xiě)每一行程序,否則Python解釋器跟你沒(méi)完沒(méi)了地抱怨,這樣確保了Python代碼有良好的可讀性。因此,你上周寫(xiě)的程序,今天還能很容易地看懂。第二,Python程序既能面向過(guò)程,也能面向?qū)ο。什么是過(guò)程,什么是對(duì)象,如果你寫(xiě)不了200行的程序,沒(méi)必要去敲破腦袋搞清楚。 第三,Python提供了豐富的基本數(shù)據(jù)結(jié)構(gòu),例如元組(tuple),列表(list),字典(dictionary)和集合(set)之類(lèi)的的數(shù)據(jù)結(jié)構(gòu)。對(duì)于C++的開(kāi)發(fā)者,如果使用這些數(shù)據(jù)街頭,需要學(xué)習(xí)復(fù)雜的標(biāo)準(zhǔn)模板庫(kù),要么自己去開(kāi)發(fā),總之是費(fèi)時(shí)費(fèi)力。而Python的用戶(hù),可以輕松使用這些數(shù)據(jù)結(jié)構(gòu)帶來(lái)豐富功能。 最后也是最重要的一點(diǎn),Python有極其豐富的共享資源。對(duì)于一個(gè)應(yīng)用Python的軟件開(kāi)發(fā)人員而言,一定要記住,你是在用Python而不是開(kāi)發(fā)Python。對(duì)于任何一個(gè)常用的計(jì)算機(jī)操作,不管復(fù)雜與否,開(kāi)發(fā)人員基本上都可以在網(wǎng)上找到免費(fèi)的Python代碼庫(kù)。開(kāi)發(fā)人員需要做的,就是開(kāi)發(fā)盡可能簡(jiǎn)單的Python代碼,調(diào)用這些代碼庫(kù),完成自己的任務(wù)。
Python容易不容易學(xué)?Python強(qiáng)大不強(qiáng)大?我的答案是Python很強(qiáng)大,但是我不知道對(duì)于小孩子來(lái)說(shuō),到底容易不容易學(xué)。如果沒(méi)有任何數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ),我不知道怎么給孩子講明白列表的工作原理。那些現(xiàn)成的Python代碼庫(kù),真的既豐富又強(qiáng)大。有大人幫忙,孩子們可以輕松用Python寫(xiě)一個(gè)收發(fā)電子郵件的程序。可是電子郵件里的文字和圖片,到底是怎樣從這臺(tái)計(jì)算機(jī)到那臺(tái)計(jì)算機(jī)的,孩子們要是問(wèn)起來(lái),Python程序員應(yīng)該不是很容易回答。隨手抓來(lái)的Python代碼庫(kù),讓我們不必關(guān)注細(xì)節(jié),直奔主題地開(kāi)發(fā)程序,完成我們的工作?墒,我總覺(jué)得,孩子們學(xué)習(xí)計(jì)算機(jī)程序設(shè)計(jì),是需要了解細(xì)節(jié)的。教孩子學(xué)習(xí)寫(xiě)程序,不應(yīng)該是簡(jiǎn)單的然他們學(xué)會(huì)怎樣用別人的代碼搭積木,而更應(yīng)該讓他們了解每塊積木是怎么工作的。我們大人用Python寫(xiě)程序,是因?yàn)槲覀冎豢粗亟Y(jié)果。孩子們學(xué)習(xí)寫(xiě)程序,更應(yīng)該側(cè)重過(guò)程。如果沒(méi)有計(jì)算機(jī)基礎(chǔ),上來(lái)就學(xué)習(xí)Python,孩子再聰明,怕也只能是渾淪吞棗式地學(xué)習(xí)。在大人的指引下,他們能夠?qū)懗鲂〕绦,離開(kāi)了大人指導(dǎo),他們還能走多遠(yuǎn)?我不是很樂(lè)觀(guān)。
相關(guān)推薦:
小升初試題、期中期末題、小學(xué)奧數(shù)題
盡在奧數(shù)網(wǎng)公眾號(hào)
歡迎使用手機(jī)、平板等移動(dòng)設(shè)備訪(fǎng)問(wèn)幼教網(wǎng),幼兒教育我們一路陪伴同行!>>點(diǎn)擊查看