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